在网站中经常需要进行在线人数的统计。过去的一般做法是结合登录和退出功能,即当用户输入用户名密码进行登录的时候计数器加1,然后当用户点击退出按钮退出系统的时候计数器减1。这种处理方式存在一些缺点,例如:用户正常登录后,可能会忘记点击退出按钮,而直接关闭浏览器,导致计数器减1的操作没有及时执行;网站上还经常有一些内容是不需要登录就可以访问的,在这种情况下也无法使用上面的方法进行在线人数统计。
我们可以利用Servlet规范中定义的事件监听器(Listener)来解决这个问题,实现更准确的在线人数统计功能。对每一个正在访问的用户,J2EE应用服务器会为其建立一个对应的HttpSession对象。当一个浏览器第一次访问网站的时候,J2EE应用服务器会新建一个HttpSession对象,并触发HttpSession创建事件,如果注册了HttpSessionListener事件监听器,则会调用HttpSessionListener事件监听器的sessionCreated方法。相反,当这个浏览器访问结束超时的时候,J2EE应用服务器会销毁相应的HttpSession对象,触发HttpSession销毁事件,同时调用所注册HttpSessionListener事件监听器的sessionDestroyed方法。
可见,对应于一个用户访问的开始和结束,相应的有sessionCreated方法和sessionDestroyed方法执行。这样,我们只需要在HttpSessionListener实现类的sessionCreated方法中让计数器加1,在sessionDestroyed方法中让计数器减1,就轻松实现了网站在线人数的统计功能。
下面就是利用HttpSessionListener实现在线人数统计的一个例子,这个例子已经在中创软件的J2EE应用服务器InforWeb中测试通过。
首先,编写一个简单的计数器,代码如下:
- package gongfei.cmc.articles.onlinecounter;
- public class OnlineCounter {
- private static long online = 0;
- public static long getOnline() {
- return online;
- }
- public static void raise(){
- online++;
- }
- public static void reduce(){
- online--;
- }
- }
然后,编写HttpSessionListener实现类,在这个实现类的sessionCreated方法中调用OnlineCounter的raise方法,在sessionDestroyed方法中调用OnlineCounter的reduce方法,代码如下:
- package gongfei.cmc.articles.onlinecounter;
- import javax.servlet.http.HttpSessionEvent;
- import javax.servlet.http.HttpSessionListener;
- public class OnlineCounterListener implements HttpSessionListener {
- public void sessionCreated(HttpSessionEvent hse) {
- OnlineCounter.raise();
- }
- public void sessionDestroyed(HttpSessionEvent hse) {
- OnlineCounter.reduce();
- }
- }
再然后,把这个HttpSessionListener实现类注册到网站应用中,也就是在网站应用的web.xml中加入如下内容:
- <web-app>
- ……
- <listener>
- <listener-class>
- gongfei.cmc.articles.example.OnlineCounterListener
- </listener-class>
- </listener>
- ……
- </web-app>
OK,在线人数统计功能已经实现,只要在JSP页面中加入下面这样的脚本就能显示但前在线人数了:
- <%@ page language="java" pageEncoding="GB2312" %>
- <%@ page import="gongfei.cmc.articles.onlinecounter.OnlineCounter" %>
- <html>
- <head><title>On Line Counert</title></head>
- <body bgcolor="#FFFFFF">
- On line:<%=OnlineCounter.getOnline()%>
- </body>
- </html>
分享到:
相关推荐
主要介绍了Spring boot通过HttpSessionListener监听器统计在线人数的实现代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下
用HttpSessionListener实现在线人数和历史访问量的统计
jsp 统计在线人数实例,是个完整的项目实例,部署即可查看效果! 通过使用:HttpSessionListener、HttpSessionBindingListener来实现. valueBound 方法登录触发。 valueUnbound 方法退出触发。
用户登录时,调用LoginServlet,将用户名写入application的在线用户列表中,用户退出时,调用LogoutServlet,调用session.invalidate(),交给HttpSessionListener的sessionDestroyed()方法,将用户从在线列表中删除。...
此类通过监听器实现了在线人数统计,其原理很简单,就是每当增加一个HttpSession时就触发了实现HttpSessionListener接口的类的SessionCreated()方法,使在线人数加1....
每隔一分钟统计在线人数 very good very strong
实现在线人的显示,通过实现ServletContenxListener,HttpSessionListener,HttpSessionAttributeListener来实现在线人的展示
HttpSessionListener 和HttpSessionBindingListener的区别 HttpSessionBindingListener单点登录。
【资源说明】 1、基于springboot+MyBatis实现的某房产平台系统源码+项目说明(毕设).zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机...HttpSessionListener监听器统计系统当前在线人数
用户注销 非正常退出 session失效 三种情况来进行 控制 分别使用了两种方式 进行了实现1:不修改数据库使用HashMap+HttpSessionListener 2:给数据库添加online列 使用(数据库脚本包含在内)HashMap+...
主要介绍了java 在Jetty9中使用HttpSessionListener和Filter的相关资料,需要的朋友可以参考下
您好,请访问:http://msdn.microsoft.com/zh-cn/library/aa478989.aspx [^] Yours Farhad。
基于Spring+Struts2+ibatis框架,利用 HttpSessionBindingListener接口进行监听,实现防止异地登录,配有全部代码及sql数据库表
使用SessionListener+持久化Session+Springmvc拦截器实现单点登录
jsp中唯一登录,使用session控制.
利用HttpSessionListener统计多在线用户人数 Spring使用ContextLoaderListener加载ApplicationContext配置信息 Spring使用Log4jConfigListener配置Log4j日志 Spring使用IntrospectorCleanupListener清理
8.1. 使用HttpSessionListener 8.2. 使用HttpSessionBindingListener 9. 封装taglib组件 9.1. 用taglib实现循环 9.2. 关于jstl 10. 综合电子留言板 10.1. 电子留言板用户指南 10.2. 数据库设计 10.3. 功能设计...
################ tips...借助Junit和Spring TestContext framework 和RestController监听器的作用: 监听对象 监听对象的属性 1:统计在线人数和在线用户 HttpSessionListener httpSessionAttributeListener 2:系统启
企业drp系统经典实现。 包括: v1.0 * 用户添加 v1.1 * 采用Ajax判断用户代码是否重复 v1.2 * 分页查询用户 v1.3 * 用户维护页面控制 v1.4 * 修改用户 v1.5 * 删除用户 v1.6 * 采用Filter...
关于Servlet监听器的几个例子,用于统计在线人数等等