Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >分ip统计网站的访问次数

分ip统计网站的访问次数

作者头像
星哥玩云
发布于 2022-09-14 13:04:53
发布于 2022-09-14 13:04:53
2.3K00
代码可运行
举报
文章被收录于专栏:开源部署开源部署
运行总次数:0
代码可运行

1、分ip统计网站的访问次数

统计工作需要在所有资源之前都执行,那么就可以放到Filter中了。

我们这个过滤器不打算做拦截操作!因为我们只是用来做统计的。

用什么东西来装载统计的数据。Map<String,Integer>

整个网站只需要一个Map即可!

Map什么时候创建(使用ServletContextListener,在服务器启动时完成创建,并只在到ServletContext中),Map保存到哪里!(Map保存到ServletContext中!!!)

  • Map需要在Filter中用来保存数据
  • Map需要在页面使用,打印Map中的数据

2、说明

网站统计每个IP地址访问本网站的次数。

3、分析

因为一个网站可能有多个页面,无论哪个页面被访问,都要统计访问次数,所以使用过滤器最为方便。

因为需要分IP统计,所以可以在过滤器中创建一个Map,使用IP为key,访问次数为value。当有用户访问时,获取请求的IP,如果IP在Map中存在,说明以前访问过,那么在访问次数上加1,即可;IP在Map中不存在,那么设置次数为1。

把这个Map存放到ServletContext中!

4、代码

监听器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class AListener implements ServletContextListener {
	/**
	 * 在服务器启动时创建Map,保存到ServletContext
	 */
    public void contextInitialized(ServletContextEvent sce) {
    	// 创建Map
    	Map<String,Integer> map = new LinkedHashMap<String,Integer>();
    	// 得到ServletContext
    	ServletContext application = sce.getServletContext();
    	// 把map保存到application中
    	application.setAttribute("ipCountMap", map);
    }

    public void contextDestroyed(ServletContextEvent sce) {
    }
}

配置监听器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <listener>
    <listener-class>com.tyschool.web.listener.AListener</listener-class>
  </listener>

index.jsp

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <body>
<h1>IP统计访问次数</h1>
<table align="center" width="50%" border="1">
	<tr>
		<th>IP地址</th>
		<th>次数</th>
	</tr>
<c:forEach items="${applicationScope.ipCountMap }" var="entry">
	<tr>
		<td>${entry.key }</td>
		<td>${entry.value }</td>
	</tr>
</c:forEach>
 </table>
  </body>

IPFilter

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class IPFilter implements Filter {
	private ServletContext context;

	public void init(FilterConfig fConfig) throws ServletException {
		context = fConfig.getServletContext(); 
		Map<String, Integer> ipCountMap = Collections
				.synchronizedMap(new LinkedHashMap<String, Integer>());
 		context.setAttribute("ipCountMap", ipCountMap);
	}

	@SuppressWarnings("unchecked")
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		String ip = req.getRemoteAddr(); 

		Map<String, Integer> ipCountMap = (Map<String, Integer>) context
				.getAttribute("ipCountMap");
 
		Integer count = ipCountMap.get(ip); 
		if (count == null) {
			count = 1;
 		} else {
			count += 1; 
		}
		ipCountMap.put(ip, count); 

		context.setAttribute("ipCountMap", ipCountMap); 
		chain.doFilter(request, response); 
	}

	public void destroy() {}
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <filter>
    <display-name>IPFilter</display-name>
    <filter-name>IPFilter</filter-name>
    <filter-class>cn.itcast.filter.ip.IPFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>IPFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ServletContextListener作用[通俗易懂]
ServletContext 被 Servlet 程序用来与 Web 容器通信。例如写日志,转发请求。每一个 Web 应用程序含有一个Context,被Web应用内的各个程序共享。因为Context可以用来保存资源并且共享,所以我所知道的 ServletContext 的最大应用是Web缓存—-把不经常更改的内容读入内存,所以服务器响应请求的时候就不需要进行慢速的磁盘I/O了。
全栈程序员站长
2022/07/01
4190
ServletContextListener简单应用:统计访问人数
在Servlet API中有这样一个ServletContextListener接口,他能过监听servletContext的生命周期,也就是web应用的生命周期。 servletContextListener接口中定义了两个方法,分别用于监听web应用的创建和销毁,利用这两个方法可以完成对网站访问人数进行统计。 下面用一个实例来说明: 首先建一个InitListener.java,用来监听每一web应用的创建,其原理是这样的,每有一个用户访问该网站(jsp),服务器必定会启动一个web应用,可以通过继承servletContextListener来监听web的启动,从而统计来访人数。 InitListener.java:
the5fire
2019/02/28
1K0
JavaWeb-网站在线用户信息、网站访问量以及管理踢出用户实例
这个稍微比上个版本做得完善了一点,用了JavaBean来封装用户信息,添加了一个管理踢用户的功能。 上一个的用户访问量是通过监听request来统计的,在这个实例中,我们也可以通过过滤器来实现统计网站访问量。
谙忆
2021/01/21
3K0
JavaWeb-网站在线用户信息、网站访问量以及管理踢出用户实例
JavaWeb-Servlet技术的监听器-解析与实例-网站在线用户信息与网页点击量
在Web项目中,我们对下面这几个监听器必须熟练的使用,它们的作用真的很大。熟练的使用后,可以使我们少绕弯路,少写很多代码、
谙忆
2021/01/21
4340
JavaWeb-Servlet技术的监听器-解析与实例-网站在线用户信息与网页点击量
Java Servlet 做一个简单的分IP访问统计系统
本文由 Alone88 创作,采用 知识共享署名4.0 国际许可协议进行许可 本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名 最后编辑时间为: Sep 16, 2019 at 08:40 am
Alone88
2019/10/22
5310
过滤器Filter精华知识点,怎能不看 ​
过滤器Filter 1 什么是过滤器 过滤器JavaWeb三大组件之一,它与Servlet很相似!不它过滤器是用来拦截请求的,而不是处理请求的。 当用户请求某个Servlet时,会先执行部署在这个请求
Java帮帮
2018/03/19
9770
过滤器Filter精华知识点,怎能不看 ​
ServletContextListener介绍「建议收藏」
在Servlet API中有一个ServletContextListener接口,它能够监听ServletContext对象的生命周期,实际上就是监听Web应用的生命周期。
全栈程序员站长
2022/07/01
1.1K0
java监听器从入门到放弃?
监听器就是实现一个特定接口的java程序,此程序专门用来监听另一个类方法的调用。java的awt大量的运用到了此种模式,例如可以给button对象添加一个点击事件,当鼠标点击时,就会调用事件处理程序。又如:在javascript事件中也运用到了此种模式,当用户点击鼠标时,会触发一个鼠标点击事件去调用程序员定义的事件处理程序。下面就以GUI编程来说明监听器。监听器都使用到了观察者模式,观察者模式所定义的对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖他的对象都会得到通知自动更新。
好好学java
2018/09/21
2.9K0
java监听器从入门到放弃?
ServletContext与Web应用以及Spring容器启动
Servlet容器在启动时会加载Web应用,并为每个Web应用创建唯一的ServletContext对象。
良月柒
2019/03/20
9100
ServletContext与Web应用以及Spring容器启动
Listener与Filter监听器基础使用
[TOC] 1.Listener 1) 基础介绍 Q:Listener是什么?有什么用? 答:Listener监听器,用于监听某一个事件的发生。 Q:监听器的内部机制是什么? 答:实就是接口回调,事件
全栈工程师修炼指南
2020/10/23
6140
Listener与Filter监听器基础使用
Web阶段:第十二章:JSP动态页面
作者:java_wxid **1.什么是Jsp?** jsp是java server page,java的服务器页面。 2.为什么要学习jsp技术 因为jsp技术可以很好的解决在Servlet程序中回
Java廖志伟
2022/09/28
8090
Web阶段:第十二章:JSP动态页面
JavaWeb中的异卵双胞胎——监听器与过滤器
监听器与过滤器 监听器 作用 使用 1、创建一个普通java类实现指定的接口 2、在web.xml进行配置,使其生效(放在dispalyname标签的上面) 监听器可以继承的的接口 1、ServletRequestListener 2、 ServletRequestAttributeListener 3、HttpSessionListener 4、HttpSessionAttributeListener 5、ServletContextListener 6、ServletContextAttributeL
时间静止不是简史
2020/07/26
3580
JavaWeb - Filter 和 Listener
Filter 本意为”过滤“的含义,是 JavaWeb 的三大组件之一,三大组件为:Servlet、Filter、Listener。
RendaZhang
2020/09/08
5680
JavaWeb - Filter 和 Listener
day17_Listener与Filter学习笔记
    事件:就是一个事情。     事件源:产生这个事情的源头。     监听器:用于监听指定的事件的对象。(关联事件和事件源)     注册监听:要想让监听器可以监听到事件产生,必须对其进行注册。
黑泽君
2018/10/11
4010
day17_Listener与Filter学习笔记
监听器第二篇【统计网站人数、自定义session扫描器、踢人小案例】
从第一篇已经讲解过了监听器的基本概念,以及Servlet各种的监听器。这篇博文主要讲解的是监听器的应用。 统计网站在线人数 分析 我们在网站中一般使用Session来标识某用户是否登陆了,如果登陆了,就在Session域中保存相对应的属性。如果没有登陆,那么Session的属性就应该为空。 现在,我们想要统计的是网站的在线人数。我们应该这样做:我们监听是否有新的Session创建了,如果新创建了Sesssion,那么在线人数就应该+1。这个在线人数是整个站点的,所以应该有Context对象保存。 大致思路:
Java3y
2018/03/15
8680
监听器第二篇【统计网站人数、自定义session扫描器、踢人小案例】
Servlet和JSP总结
##响应数据乱码 -为什么出现乱码,因为输出响应数据默认使用的是iso8859-1 需要把此编码改成utf-8
爱撒谎的男孩
2019/12/31
2.7K0
spring之如何在web应用中使用?
可以将IOC容器放在ServletContext(即applicaiton域)的一个属性中。
西西嘛呦
2020/08/26
4090
spring之如何在web应用中使用?
E022Web学习笔记-Filter和Listener
訾博ZiBo
2025/01/06
970
E022Web学习笔记-Filter和Listener
过滤器 & 监听器的学习
过滤器:Filter 1. 概述: * 生活照的过滤器:净水器、空气净化器、土匪 * web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。 * 过滤器的作用: * 一般用于完成通用的操作。 如:登录验证、统一编码处理 、敏感字符过滤 2. 步骤: 1.定义一个类,实现接口Filter 2.复写方法 3.配置拦截路径 1.web.xml 2.注解 package com.nlxj.web.filter; import javax.se
Rochester
2020/09/01
3730
Listener监听器
在Servlet技术中已经定义了一些事件,并且我们可以针对这些事件来编写相关的事件监听器,从而对事件作出相应处理。Servlet事件主要有3类:Servlet上下文事件、会话事件与请求事件。下面具体讲解这3类事件的监听器实现。 1.对Servlet上下文进行监听(就是JSP中的application) 可以监听ServletContext对象的创建和删除以及属性的添加、删除和修改等操作。该监听器需要使用到如下两个接口类: ● ServletContextAttributeListener:监听对Servle
汤高
2018/01/11
1.1K0
相关推荐
ServletContextListener作用[通俗易懂]
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验