Filter应用之分ip统计网站的访问次数
2015-11-24 10:33
633 查看
ip | count |
192.168.1.111 | 2 |
192.168.1.112 | 59 |
因为需要分IP统计,所以可以在过滤器中创建一个Map,使用IP为key,访问次数为value。当有用户访问时,获取请求的IP,如果IP在Map中存在,
说明以前访问过,那么在访问次数上加1,即可;IP在Map中不存在,那么设置次数为1。
把这个Map放在ServletContextListener,在服务器启动时完成创建(使用监听器),并只在到ServletContext中)。
Ø Map需要在Filter中用来保存数据
Ø Map需要在页面使用,打印Map中的数据
代码
index.jsp
<body> <h1>分IP统计访问次数</h1> <table align="center" width="50%" border="1"> <tr> <th>IP地址</th> <th>次数</th> </tr> <c:forEach items="${applicationScope.ipCountMap }" var="entry"> <tr> <td>${entry.key }</td> <td>${entry.value }</td> </tr> </c:forEach> </table> </body> |
publicclass IPFilter implements Filter { private ServletContext context; publicvoid init(FilterConfig fConfig) throws ServletException { context = fConfig.getServletContext(); Map<String, Integer> ipCountMap = Collections .synchronizedMap(new LinkedHashMap<String, Integer>()); context.setAttribute("ipCountMap", ipCountMap); } @SuppressWarnings("unchecked") publicvoid doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; String ip = req.getRemoteAddr(); Map<String, Integer> ipCountMap = (Map<String, Integer>) context .getAttribute("ipCountMap"); Integer count = ipCountMap.get(ip); if (count == null) { count = 1; } else { count += 1; } ipCountMap.put(ip, count); context.setAttribute("ipCountMap", ipCountMap); chain.doFilter(request, response); } publicvoid destroy() {} } |
<filter> <display-name>IPFilter</display-name> <filter-name>IPFilter</filter-name> <filter-class>cn.itcast.filter.ip.IPFilter</filter-class> </filter> <filter-mapping> <filter-name>IPFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> |
相关文章推荐
- ssh架构搭建
- iOS应用架构谈 view层的组织和调用方案
- 豆瓣九点将永久关闭 又一个RSS阅读工具消失
- IBM SOA[ESB,BPM,Portal]基础架构图解
- 使用容器构建微服务架构
- 网站提速的相关注意点
- Debug 之 VS2010网站生成成功,但是发布失败
- 仿鲜花网购物网站,JSP知识巩固,适合初学者
- Java开发牛人十大必备网站
- JVM性能参数调优实践,不会执行Full GC,网站无停滞
- js获取网站项目根路径
- 使用风讯做新闻类网站
- 天下数据浅谈服务器稳定性对于网站有哪些突出影响
- 构建高并发高可用的电商平台架构大纲
- 网站开发进阶(二十)JS中window.alert()与alert()的区别
- 网站开发进阶(二十)JS中window.alert()与alert()的区别
- 网站开发进阶(十九)计划任务功能——信息自动弹出
- 网站开发进阶(十九)计划任务功能——信息自动弹出
- 网站开发进阶(十八)js获取html标签中的值
- 网站开发进阶(十八)js获取html标签中的值