分ip统计网站访问次数


package web.listener; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionListener; import java.util.LinkedHashMap; import java.util.Map; @WebListener() public class AListener implements ServletContextListener, HttpSessionListener, HttpSessionAttributeListener { /* * 在服务启动时创建Map,保存到ServletContext * */ public void contextInitialized(ServletContextEvent sce) { //创建Map Map<String,Integer> map = new LinkedHashMap<String, Integer>(); //得到ServletContext ServletContext application = sce.getServletContext(); application.setAttribute("map",map); } public void contextDestroyed(ServletContextEvent sce) { } }
 1 package web.filter;
 2 
 3 import javax.servlet.*;
 4 import javax.servlet.annotation.WebFilter;
 5 import java.io.IOException;
 6 import java.util.Map;
 7 
 8 /*
 9 * 从application中获取Map
10 * 从request中得到当前客户端的IP
11 * 进行统计工作,结果保存到Map中
12 * */
13 @WebFilter(filterName = "AFilter",urlPatterns = "/*")
14 public class AFilter implements Filter {
15     private FilterConfig config;
16     public void destroy() {
17     }
18 
19     public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
20         /*
21         * 1、得到application中的map
22         * 2、从request中获取当前客户端的IP地址
23         * 3、查看map中是否存在这个IP对应访问次数,如果存在,把次数+1再保存回去
24         * 4、如果不存在这个IP,那么说明是第一次访问本站,设置访问次数为1
25         * */
26         /*
27         * 1、得到application
28         * */
29         ServletContext app = config.getServletContext();
30         Map<String,Integer> map = (Map<String,Integer>) app.getAttribute("map");
31         /*
32         * 2、得到客户端的ip地址
33         * */
34         String ip = req.getRemoteAddr();
35         /*
36         *3、进行判断
37         * */
38         if (map.containsKey(ip)) {
39             int cnt = map.get(ip);
40             map.put(ip,cnt+1);
41         }else {
42             map.put(ip,1);
43         }
44         app.setAttribute("map",map);
45 
46         chain.doFilter(req, resp);//肯定放行
47     }
48     /*
49     * 在服务器启动时就会执行本方法,而且本方法只执行一次
50     * */
51     public void init(FilterConfig config) throws ServletException {
52         this.config= config;
53     }
54 }
 1 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
 2 <%--
 3   Created by IntelliJ IDEA.
 4   User: Mac
 5   Date: 13/09/2017
 6   Time: 12:37 PM
 7   To change this template use File | Settings | File Templates.
 8 --%>
 9 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
10 <html>
11 <head>
12     <title>Title</title>
13 </head>
14 <body>
15 <h1>显示结果</h1>
16 <table align="center" width="60%" border="1">
17     <tr>
18         <td>ip</td>
19         <td>次数</td>
20     </tr>
21     <c:forEach items="${applicationScope.map}" var="entry">
22     <tr>
23         <td>${entry.key}</td>
24         <td>${entry.value}</td>
25     </tr>
26     </c:forEach>
27 </table>
28 </body>
29 </html>
原文地址:https://www.cnblogs.com/gdwkong/p/7635545.html