在网站中经常需要进行在线人数的统计。过去的一般做法是结合登录和退出功能,即当用户输入用户名密码进行登录的时候计数器加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实现在线人数统计的一个demo:
首先,编写一个简单的计数器,代码如下:
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>
分享到:
相关推荐
在JavaWeb开发中,"用session统计在线人数"是一个常见的需求,主要应用于网站或应用的实时用户活动监控。本文将详细解析如何利用session这一核心技术来实现这个功能。 首先,理解session的基本概念。在Web开发中,...
在Servlet中,可以利用HttpSession的事件监听器,记录每次session的创建和销毁,以此推算出在线用户和总访问量。例如,每当sessionCreated()被调用时,增加访问计数;当sessionDestroyed()被调用时,表明用户离开,...
在线人数统计的基本思路是利用Session来记录活跃用户。每当有用户访问网站时,如果该用户还没有Session,服务器就创建一个新的Session。统计在线人数时,遍历所有活跃的Session,计数器增加对应数量即可。 3. **...
在网站运营过程中,统计在线人数和访问量是至关重要的数据指标,它们可以帮助我们了解网站的活跃度、用户行为以及优化方向。本主题将详细介绍如何使用Java编程语言来实现这一功能,特别是关注当前年、月、日的访问量...
本教程将深入讲解如何利用Java的监听器机制来统计在线人数,具体涉及到ServletContextListener、HttpSessionListener以及HttpSessionAttributeListener。 首先,`ServletContextListener`是Java Servlet API中的一...
这个程序叫做`OnlineCounter.java`,它包含一个静态变量`online`来记录在线人数,并提供了`raise()`和`reduce()`方法来增加和减少在线人数。当一个新的会话被创建(即用户登录或新开浏览器窗口)时,`online`计数器...
这篇文章介绍了通过使用Java的监听器(Listener)机制来实现网站在线人数统计的示例,重点在于如何利用ServletContextListener、HttpSessionAttributeListener和HttpSessionListener这三个监听器接口。 首先,我们...
总结来说,通过使用Java监听器实现在线人数统计,开发者可以利用servlet规范提供的接口来实时追踪和显示当前网站的活跃用户数量。这种方法不仅特别,而且对于理解Java Web开发中的事件驱动模型也非常有帮助。希望...
在本主题“day18 监听器”中,我们将探讨如何利用监听器来统计在线人数、定时销毁超时session、实现session的钝化与活化,以及如何在系统中显示在线用户列表和实现踢人功能,从而防止用户自动登录。同时,还会涉及...
在`HttpSessionListener`中,我们可以维护一个全局的在线用户计数,并在`sessionCreated()`和`sessionDestroyed()`方法中更新这个计数,同时可以利用`SessionUtil`工具类或其他方式来存储和获取在线用户列表。...
我们可以在session创建时记录在线人数加一,session销毁(如超时或用户关闭浏览器)时减少在线人数。注意,这种方法只适用于用户保持活动状态的情况,如果用户离开但未关闭浏览器,session可能不会立即销毁,导致...
在这个项目中,`在线人数监听`可能是通过`HttpSessionListener`实现的。每当一个新的会话(session)创建或销毁时,监听器就会收到通知。当用户登录时,创建一个新的会话,并将用户视为在线;当用户退出时,销毁相应...
这些监听器可以监听session和application的创建、销毁事件,例如,当有新用户登录时,可以通过session监听器记录在线人数;当聊天消息被发送时,可以通过application监听器更新在线用户的状态。 在具体实现过程中,...
在"jsp中监听器实现在线用户统计"这个场景下,我们需要关注的是如何利用监听器来跟踪和管理在线用户。 首先,我们要理解Servlet监听器的概念。Servlet监听器是实现了Java Servlet API中特定接口的Java类,这些接口...
这个类维护了一个静态变量`onlineUsers`来记录在线用户数量。当新会话创建时,`sessionCreated()`方法会增加计数;当会话销毁(通常是因为用户关闭浏览器或会话超时)时,`sessionDestroyed()`方法会减少计数。 ...
在线人数统计通常需要一个全局的数据结构来存储所有在线用户的会话ID或其他标识符。这可以通过ServletContext对象的属性来实现,因为ServletContext是全局唯一的,可以在整个Web应用范围内共享数据。 ```java ...
- 统计在线用户数量:使用`HttpSessionListener`记录活跃会话,以计算在线人数。 - 数据缓存管理:在`ServletContextListener`中初始化缓存,清理时清除缓存。 - 日志管理:记录应用程序启动、停止和其他重要事件。 ...
在本主题“java + bean 分页技术”中,我们将深入探讨如何利用Java Bean实现高效的分页功能,这在处理大量数据时特别重要,能够提高网页的加载速度并优化用户体验。 分页技术的基本思想是将大数据集分割成多个小...
out.print("在线人数 " + showList.size() + " "); for (int i = 0; i (); i++) { out.print(showList.get(i) + " 在线 " + " "); } %> 退出 ``` ##### 3.4 配置文件:web.xml ```xml <!...