package cn.Listener;
import java.util.* ;
import javax.servlet.* ;
import javax.servlet.http.* ;
public class OnLineDemo
implements ServletContextListener,HttpSessionListener,HttpSessionAttributeListener
{
// 声明一个ServletContext对象
private ServletContext application = null ;
public void contextInitialized(ServletContextEvent sce)
{
// 容器初始化时,向application中存放一个空的容器
this.application = sce.getServletContext() ;
this.application.setAttribute("alluser",new ArrayList()) ;
}
public void contextDestroyed(ServletContextEvent sce)
{}
public void sessionCreated(HttpSessionEvent se)
{}
public void sessionDestroyed(HttpSessionEvent se)
{
// 将用户名称从列表中删除
List l = (List)this.application.getAttribute("alluser") ;
String value = (String)se.getSession().getAttribute("uname") ;
System.out.println("取出要注销的用户Value-->"+value);
l.remove(value) ;
this.application.setAttribute("alluser",l) ;
}
public void attributeAdded(HttpSessionBindingEvent se)
{
// 如果登陆成功,则将用户名保存在列表之中
List l = (List)this.application.getAttribute("alluser") ;
System.out.println("添加 用户名 -->"+se.getValue());
l.add(se.getValue()) ;
this.application.setAttribute("alluser",l) ;
}
public void attributeRemoved(HttpSessionBindingEvent se)
{}
public void attributeReplaced(HttpSessionBindingEvent se)
{}
};
/*
<listener>
<listener-class>cn.mldn.lxh.listener.OnLineDemo</listener-class>
</listener>
*/
监听器实现在线人数统计



在IT行业中,监听器(Listener)是一种常见的编程概念,它被广泛应用于各种系统和框架中,用于跟踪和响应特定事件的发生。在这个场景下,我们关注的是如何利用监听器来实现在线人数的统计。在线人数统计是一项重要的功能,特别是在构建实时交互的Web应用或者聊天室时,能够提供实时的用户活跃度信息。 我们需要理解业务需求。当用户登录系统时,我们将其视为在线状态;当用户退出或长时间无操作时,我们认为他们离线。因此,我们需要在用户登录和登出时触发相应的事件,并通过监听这些事件来更新在线人数。 在Java Web开发中,我们可以使用Servlet API中的Session监听器来实现这一功能。Session监听器是实现了`javax.servlet.http.HttpSessionListener`接口的类,它可以监听到Session的创建和销毁事件,从而判断用户的登录和登出。 下面是一个简单的Session监听器的代码示例: ```java import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class OnlineUserCounter implements HttpSessionListener { private static int onlineCount = 0; @Override public void sessionCreated(HttpSessionEvent se) { synchronized (OnlineUserCounter.class) { onlineCount++; System.out.println("在线人数增加,当前在线人数:" + onlineCount); } } @Override public void sessionDestroyed(HttpSessionEvent se) { synchronized (OnlineUserCounter.class) { onlineCount--; System.out.println("在线人数减少,当前在线人数:" + onlineCount); } } // 获取当前在线人数的方法 public static int getOnlineCount() { return onlineCount; } } ``` 在这个例子中,`sessionCreated()`方法会在用户创建新的会话(即登录)时被调用,增加在线人数计数。相反,`sessionDestroyed()`方法会在会话过期或用户手动登出时被调用,减少在线人数计数。 为了使监听器生效,我们需要在`web.xml`配置文件中注册这个监听器: ```xml <web-app> ... <listener> <listener-class>com.example.OnlineUserCounter</listener-class> </listener> ... </web-app> ``` 此外,需要注意的是,基于Session的在线人数统计可能会存在一些问题,例如用户关闭浏览器但未正式登出,此时Session可能会因浏览器关闭而意外结束,导致在线人数统计不准确。为了解决这个问题,可以结合应用服务器的特性,如使用心跳检测来更精确地追踪用户活动状态。 除了Java Web,其他技术栈如Node.js、Python Flask等也有类似监听机制,如Express的中间件或者Flask的before_request/after_request装饰器,同样可以实现在线人数统计。 总结起来,通过监听器实现在线人数统计的核心思路是监听用户登录和登出事件,动态更新一个全局计数器。在实际项目中,可能还需要考虑并发控制、异常处理、数据持久化等复杂情况,以确保统计的准确性和稳定性。
























































- 1

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整
- lujunzizi_wugui2012-04-27不是在线人数统计,是在线人员显示- -
- comcyd2013-05-14能作参考用,没有实现人数的统计……。

- 粉丝: 1
- 资源: 3
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 13考试真题最近的t40.txt
- 2025大模型训练与推理硬件配置指南:GPU性能解析与方案推荐
- 13考试真题最近的t41.txt
- 13考试真题最近的t42.txt
- 13考试真题最近的t43.txt
- 13考试真题最近的t44.txt
- 13考试真题最近的t45.txt
- 基于stm32单片机智能衣柜程序
- 13考试真题最近的t46.txt
- 深度学习:DeepSeek R1 Distill模型微调
- 13考试真题最近的t47.txt
- dnGrep文档搜索工具
- 普通人的AI助手指南-DeepSeek的应用场景与策略
- labview写的饼图柱状图显示界面和后台
- 13考试真题最近的t48.txt
- 2025年智能家居未来十年发展趋势(25.2.20)


