分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>
分ip统计网站访问次数的更多相关文章
- Filter和Listener的应用——分IP统计网站访问次数
一:分析 统计工作需要在所有资源执行前进行,所以需要放在filter中 这个拦截器仅仅进行统计工作,不进行拦截,所以请求必须继续传递下去 用Map<String,integer>来保存数据 ...
- 学习笔记_过滤器应用_1(分ip统计网站的访问次数)
分ip统计网站的访问次数 ip count 192.168.1.111 2 192.168.1.112 59 统计工作需要在所有资源之前都执行,那么就可以放到Filter中了. 我们这个过滤器不打算做 ...
- php统计网站访问次数的一个简单方法
这里主要用到了session保存当前访问者,并将访问次数写入本地文件. <? @session_start(); $counter = intval(file_get_contents(&quo ...
- Java web--Filter过滤器分IP统计访问次数
分IP统计访问次数即网站统计每个IP地址访问本网站的次数. 分析 因为一个网站可能有多个页面,无论哪个页面被访问,都要统计访问次数,所以使用过滤器最为方便. 因为需要分IP统计,所以可以在过滤器中创建 ...
- Java web 实现 之 Filter分析ip统计网站的访问次数
统计工作需要在所有资源之前都执行,那么就可以放到Filter中了. 我们这个过滤器不打算做拦截操作!因为我们只是用来做统计的. 用什么东西来装载统计的数据.Map<String,Integer& ...
- 【JAVA系列】使用JavaScript实现网站访问次数统计代码
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[JAVA系列]使用JavaScript实现网站 ...
- web_02Java ee实现验证码,网站访问次数功能
Web Web_02版本: 实现功能 1,验证码 2,网站访问次数统计 设计内容 1,servlet 2,jsp 3,js *重点 1,验证码相关: 1,Servlrt类实现验证码的生成 CheckC ...
- JSP简单实现统计网页访问次数
JSP简单实现统计网页访问次数 需求:统计网页的访问次数 核心思想:利用application对象,将访问次数的信息放入application对象中,每次访问就+1.这里利用了application对 ...
- 使用javaWeb的二大(Listener、Filter)组件实现分IP统计访问次数
分析: 统计工作需要在所有资源之前都执行,那么就可以放到Filter中. 我们这个过滤器不打算做拦截操作!因为我们只是用来做统计 用什么东西来装载统计的数据.Map<String,Integer ...
随机推荐
- 【UI组件】——用jQuery做一个上拉刷新
技术要点: 1.jQuery的插件写法 2.上拉刷新步骤分解 3.css样式 jQuery的插件写法: $.fn.pluginName = function() { return this.each( ...
- Xcode括号自动补全以及二次编译后不显示输入
今天遇到了一个大坑,在使用栈来进行计算表达式的时候,发现输入括号就报错,以及二次编译后不显示. 测试了好久,经过无数次debug后. 二次编译不显示还是没搞明白,不过输入倒是没什么问题,就是不显示出来 ...
- Linux运维: Rsync同步数据(ubuntu16.04+windows10)
rsync同步数据 -环境:Linux (ubuntu16.04) + windows10 Linux: 安装 sudo apt-get install rsync rsync --version 查 ...
- RunningCassandraInEclipse(转载)
转载自:http://wiki.apache.org/cassandra/RunningCassandraInEclipse Eclipse is open source. Download Ecli ...
- day3.python 学习之列表
python中列表用[ ]表示, list = [ ] #表示一个空列表 1.list = [ 'A','B','C',‘D’] print(list[0]) # 表示打印出列表中的第一个元素,列表 ...
- 【App性能】:TraceView分析法
抓取traceview的日志有两种方式, 1,是在代码中片段中添加: Debug.startMethodTracing(“hello”); ....... Debug.stopMethodTracin ...
- springcloud(十)-Zuul微服务网关
为什么要使用微服务网关 前面的文章我们介绍了,Eureka用于服务的注册于发现,Feign支持服务的调用以及均衡负载,Hystrix处理服务的熔断防止故障扩散,Spring Cloud Config服 ...
- Android各版本及API对应关系,持续更新!
以下是Android的各个版本与API的对应关系图标,便于查阅,会持续更新 API等级 Android版本号 Android版本名称 对应支持包 API等级1: Android 1.0 API ...
- 开发者必备的12个JavaScript库
现在 web 设计是最有趣的了,做好 web 设计不仅要熟练使用 Javascript,css 和 html 等,还要有自己的创意设计.为了方便大家发挥自己的创意,就产生了很多 JS 框架,Node. ...
- android studio2.3.3 模拟器 Jni函数调用C++对象,lldb调试this指针和相关变量显示无效的原因
android studio2.3.3 的版本中 Jni函数调用C++对象,对象调用相关的成员函数, lldb调试,变量跟踪窗口,this指针和相关变量显示无效的原因,但这些参数实际是有效的,只是de ...