jsp:代码如下
<body>
<table align="center" border="1" width="70%">
<tr>
<th>IP</th>
<th>访问的次数</th>
</tr>
<c:forEach items="${ applicationScope.map}" var="entry">
<tr>
<th>${entry.key }</th>
<th>${entry.value }</th>
</tr>
</c:forEach>
fliter的代码如下:
package cn.edu.nsu.filter;
import java.io.IOException;
import java.util.Map;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class classFilter implements Filter {//现在xml中进行配置
private ServletContext application;
@Override//在服务器启动之后调用
public void destroy() {//生命周期方法在关闭时调用对非内存资源进行释放
// System.out.println("我要死了,抢救一下吧,我觉得我还有救,试一下吧,不行的话换个医生再试试?");
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {//每次过滤时都会执行该方法
// System.out.println("你输出了算我输");
Map<String, Integer> map=(Map<String, Integer>) application.getAttribute("map");//得到map对象
String IP=arg0.getLocalAddr();//得到访问的ip地址
if(map.containsKey(IP)){//判断是否包涵此ip地址
Integer value=map.get(IP);
map.put(IP, value+1);//若包含value值加一
}else {
map.put(IP, 1);//不包含给定默认值1
}
application.setAttribute("map", map);
arg2.doFilter(arg0, arg1);//放行,让程序进行servlet后面的代码
}
@Override//在服务器销毁之前调用
public void init(FilterConfig arg0) throws ServletException {//生命周期方法在启动时调用用来进行初始化
//filterConfig和servletConfig及其的类似方法差不多
//最主要的是获得application对象
// System.out.println("我想,我是不是来了");
application=arg0.getServletContext();//得到servletContext对象,保存到当前的类中
//拦截的四种方式
//1 请求 request//默认拦截他
//2 转发 forward
//3 包含 include
//4 错误 error
//在xml中进行如下配置<dispatcher>将上面中的一个改为大写就会拦截该对象</dispatcher>
}
}
listener的代码如下:
package cn.edu.nsu.listener;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class listener implements ServletContextListener {
public void contextInitialized(ServletContextEvent arg0) {
Map<String, Integer> map=new LinkedHashMap<String, Integer>();//设置map对象
ServletContext application=arg0.getServletContext();//通过ServletContextEvent拿到ServletContext对象
application.setAttribute("map", map);//将map对象保存到ServletContext域中
}
public void contextDestroyed(ServletContextEvent arg0) {
}
}