分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>
版权声明:本文为gdwkong原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。