`
YangUG
  • 浏览: 25888 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

利用HttpSessionListener实现系统在线人数统计

    博客分类:
  • JAVA
阅读更多
   在网站中经常需要进行在线人数的统计。过去的一般做法是结合登录和退出功能,即当用户输入用户名密码进行登录的时候计数器加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中测试通过。
  首先,编写一个简单的计数器,代码如下:
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方法,代码如下:
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>
分享到:
评论

相关推荐

    监听器实现在线人数统计

    除了Java Web,其他技术栈如Node.js、Python Flask等也有类似监听机制,如Express的中间件或者Flask的before_request/after_request装饰器,同样可以实现在线人数统计。 总结起来,通过监听器实现在线人数统计的...

    JSP 在线人数统计的实现

    **JSP 在线人数统计的实现** 在Web开发中,实时在线人数统计是一项常见的需求,它可以帮助网站管理员了解当前有多少用户正在访问网站,以便优化资源分配和服务质量。JSP(JavaServer Pages)作为Java Web开发的重要...

    J2EE登陆人数统计

    在实现在线人数统计时,可以考虑使用缓存技术,如Redis或Memcached,以减少对后台资源的压力。 综上所述,J2EE登录人数统计不仅涉及了`HttpSession`与`HttpSessionListener`的基本使用,还牵涉到了并发控制、性能...

    SessionManager:Java监听器实现在线人数统计Demo

    总结起来,"SessionManager:Java监听器实现在线人数统计Demo"是一个基于Java Servlet技术的实例,它利用HttpSessionListener监听器来跟踪用户会话的创建和销毁,进而统计在线用户数量。这个过程涉及了Servlet API、...

    day18 监听器 统计在线人数,定时销毁超时session,钝化活化session,在线列表显示和踢人功能防止用户自动登录,在线支付

    在本主题“day18 监听器”中,我们将探讨如何利用监听器来统计在线人数、定时销毁超时session、实现session的钝化与活化,以及如何在系统中显示在线用户列表和实现踢人功能,从而防止用户自动登录。同时,还会涉及...

    网站统计在线人数,当前年、月、日访问量JAVA代码

    在网站运营过程中,统计在线人数和访问量是至关重要的数据指标,它们可以帮助我们了解网站的活跃度、用户行为以及优化方向。本主题将详细介绍如何使用Java编程语言来实现这一功能,特别是关注当前年、月、日的访问量...

    用户统计javaWeb

    在本案例中,“用户统计JavaWeb”涉及到了通过Java Web技术实现对用户登录状态的跟踪、在线人数统计等功能。 ### 2. Filter 和 Listener 的作用与实现 #### 2.1 Filter 概述 Filter 是 JavaWeb 中的一种用于处理...

    jsp在线聊天设计文档

    在绵阳科贸网项目中,采用了J2EE应用服务器的事件监听器来更精确地统计在线人数。具体实现如下: 1. **监听器实现** - 创建名为`OnLineDemo`的类,实现`ServletContextListener`, `HttpSessionListener`和`...

    java web监听器统计在线用户及人数

    【Java Web 监听器统计在线用户及人数详解】 在Java Web开发中,实时统计在线用户数量是一项重要的功能,这通常涉及到对用户会话(Session)的管理。本篇文章将详细解析如何使用Java Web监听器来实现这一目标。 ...

    监听器访问计数过滤非法字符

    总之,监听器和过滤器是Java Web开发中的核心组件,它们可以帮助我们实现复杂的功能,如在线人数统计和数据安全过滤。通过合理地设计和使用这些组件,我们可以提升Web应用的性能和安全性,为用户提供更优质的体验。

    servlet 监听器范例

    在这个范例中,我们将深入探讨如何利用监听器来统计在线人员数量以及处理用户登录事件。 首先,我们需要了解Servlet监听器的基本概念。Servlet监听器是实现了特定接口的Java类,这些接口定义了针对不同Web应用程序...

Global site tag (gtag.js) - Google Analytics