Filter的应用——IP计数

来源:互联网 发布:烘焙箱怎么做饼干知乎 编辑:程序博客网 时间:2024/06/08 03:24

Listener:ServletContext生命周期监听,在项目开启时将统计IP的Map放到ServletContext中

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中的mapServletContext application = fConfig.getServletContext();Map<String,Integer> map = (Map<String, Integer>) application.getAttribute("map");//获取客户端IPString 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>



0 0