Filter的应用——IP计数
2016-04-19 19:24
148 查看
Listener:ServletContext生命周期监听,在项目开启时将统计IP的Map放到ServletContext中
Filter:统计IP访问次数
显示:
package com.app.listener; import java.util.LinkedHashMap; import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; /** * Application Lifecycle Listener implementation class AListener * */ public class AListener implements ServletContextListener { /** * Default constructor. */ public AListener() { // TODO Auto-generated constructor stub } /** * @see ServletContextListener#contextInitialized(ServletContextEvent) */ public void contextInitialized(ServletContextEvent sce) { Map<String,Integer> map = new LinkedHashMap<String,Integer>(); ServletContext application = sce.getServletContext(); application.setAttribute("map", map); } /** * @see ServletContextListener#contextDestroyed(ServletContextEvent) */ public void contextDestroyed(ServletContextEvent arg0) { // TODO Auto-generated method stub } }
Filter:统计IP访问次数
package com.app.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; /** * Servlet Filter implementation class AFilter */ public class AFilter implements Filter { private FilterConfig fConfig; public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //得到application中的map ServletContext application = fConfig.getServletContext(); Map<String,Integer> map = (Map<String, Integer>) application.getAttribute("map"); //获取客户端IP String ip = request.getRemoteAddr(); //判断IP是否存在 if(map.containsKey(ip)){ int count =map.get(ip); map.put(ip, count+1); }else{//第一次访问 map.put(ip, 1); } chain.doFilter(request, response); } public void init(FilterConfig fConfig) throws ServletException { this.fConfig = fConfig; } public void destroy() { } }
显示:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'MyJsp.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> This is my JSP page. <br> <table> <tr> <th>IP</th> <th>Count</th> </tr> <c:forEach items="${applicationScope.map }" var="entry"> <tr> <td>${entry.key }</td> <td>${entry.value }</td> </tr> </c:forEach> </table> </body> </html>