描述:当用户访问网站时,显示访问次数,但是屏蔽了相同的IP多次访问的计数。
public class AccessCountFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
// 拦截了请求
// 类型转换
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
// 获得 application
ServletContext application = request.getSession().getServletContext();
// 在 applicationScope 保存一个map,由于map相同的键能够覆盖, 记住每个ip对应的访问次数
Map countMap = (Map) application.getAttribute("countMap");
//如果没有Map证明是第一次访问,就创建一个map
if(countMap==null) {
countMap = new HashMap();
application.setAttribute("countMap", countMap);
}
// 获得来访者的ip
String ip = request.getRemoteAddr();
// 根据ip 找到次数,注意,这里返回值一定要是Integer,如果是int,他会自动 拆箱,在拆箱的 时候调用Integer方法,就会空指针异常
Integer count = (Integer) countMap.get(ip);
if(count==null)
count = 1;
else
count++;
countMap.put(ip, count);
// 放行
chain.doFilter(request, response);
}
public void destroy() {
}
}