通过监听器实现在线人数统计
本文主要介绍通过servlet的监听器监听会话的创建、销毁、登录信息会话变量的设置,用于实现在线用户统计。
package com.chinasofti.ordersys.listeners;import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Set;import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;import com.chinasofti.ordersys.vo.UserInfo;public class OrderSysListener implements HttpSessionListener,HttpSessionAttributeListener {/*** 存放所有已经登陆用户信息的Hashtable,键为用户sessionID,值为用户详细信息* */public static Hashtable<String, UserInfo> sessions = new Hashtable<String, UserInfo>();/*** 保存在线会话数的变量* */public static int onlineSessions = 0;/*** 获取在线服务员列表的方法* * @return 当前在线的所有用户列表信息* */public static ArrayList<UserInfo> getOnlineUsers() {// 获取所有在线用户的sessionIDSet<String> sessionIds = sessions.keySet();// 获取在线用户ID的迭代器Iterator<String> sessionIdIt = sessionIds.iterator();// 创建结果集合ArrayList<UserInfo> list = new ArrayList<UserInfo>();// 迭代在线用户IDwhile (sessionIdIt.hasNext()) {// 获取该sessionID对应的用户信息UserInfo info = sessions.get(sessionIdIt.next());// 判定角色信息是否符合要求if (info.getRoleId() == roleId) {// 如果角色信息和给定信息一致,则将该用户加入结果列表list.add(info);}}// 返回结果列表return list;}/*** 当session中添加属性时的监听器回调方法* * @param arg0* 监听器事件信息,可以获取添加属性的session\添加的属性名\添加的属性值等信息* */@Overridepublic void attributeAdded(HttpSessionBindingEvent arg0) {// TODO Auto-generated method stub// 如果添加的属性名是USER_INFO,则说明有一个用户登录了if (arg0.getName().equals("USER_INFO")) {// 将该用户信息添加到在线用户列表中sessions.put(arg0.getSession().getId(), (UserInfo) arg0.getValue());}}/*** 当session中移出属性时的监听器回调方法* * @param arg0* 监听器事件信息,可以获取移出属性的session\移出的属性名\移出的属性值等信息* */@Overridepublic void attributeRemoved(HttpSessionBindingEvent arg0) {// TODO Auto-generated method stub// 如果移出的属性名是USER_INFO,则说明有一个用户注销了if (arg0.getName().equals("USER_INFO")) {// 从在线用户列表中将该用户信息移出sessions.remove(arg0.getSession().getId());}}/*** 当session中属性值被替换时的监听器回调方法* * @param arg0* 监听器事件信息,可以获取替换属性的session\替换的属性名\替换的属性值等信息* */@Overridepublic void attributeReplaced(HttpSessionBindingEvent arg0) {// TODO Auto-generated method stub// 如果替换的属性名是USER_INFO,则说明有一个用户变更登录身份了if (arg0.getName().equals("USER_INFO")) {// 更新当前用户的登录信息sessions.put(arg0.getSession().getId(), (UserInfo) arg0.getValue());}}/*** 当创建Session时的监听器回调方法* * @param arg0* 监听器事件信息,可以获取创建的session信息* */@Overridepublic void sessionCreated(HttpSessionEvent arg0) {// TODO Auto-generated method stub// 在线会话数增加onlineSessions++;}/*** 当销毁Session时的监听器回调方法* * @param arg0* 监听器事件信息,可以获取销毁的session信息* */@Overridepublic void sessionDestroyed(HttpSessionEvent arg0) {// TODO Auto-generated method stub// 在线会话数减少onlineSessions--;// 如果被销毁的时候已经登录的用户if (arg0.getSession().getAttribute("USER_INFO") != null) {// 从在线用户列表中将该用户信息移出sessions.remove(arg0.getSession().getId());}}}
通过监听器实现在线人数统计相关推荐
- linux服务器在线人数,servlet监听器实现在线人数统计源码实例
servlet监听器实现在线人数统计 一.准备知识 1.servlet:servlet是一种运行服务器端的Java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求 ...
- java怎么快速创建监听类_java_利用java监听器实现在线人数统计,1.在工程中创建监听类SessionLi - phpStudy...
利用java监听器实现在线人数统计 1.在工程中创建监听类SessionListener 并且实现HttpSessionListener接口,代码如下 import javax.servlet.htt ...
- Servlet的监听器实现在线人数统计
目录 一 开发步骤 二 实战 三 测试 一 开发步骤 1 编写监听器 2 注册监听器 二 实战 1 监听器编写 import javax.servlet.ServletContext; import ...
- 使用监听器实现一个统计网站在线人数的示例
(1)创建一个监听器实现类 要大致统计一个网站的在线人数,首先,可以通过ServletContextListener监听,当Web应用上下文启动时,在ServletContext中添加一个List,用 ...
- Java监听器实现网站在线人数统计
1.监听器定义 监听器也叫Listener,是Servlet的监听器,它可以监听客户端的请求.服务端的操作等.通过监听器,可以自动激发一些操作,比如监听在线的用户的数量. 2.常见的监听器 1)Ser ...
- SpringMVC的在线人数统计监听器
一.session简单介绍 在做在线统计人数监听器前,需要先简单了解一下session. Session存储在服务器端,一般放置在服务器的内存中(为了高速存取),Sessinon在用户 ...
- 使用监听器Listener实现在线人数统计功能
使用监听器Listener实现在线人数统计功能 目录树及使用的文件 1.首先创建一个CountListener类实现HttpSessionListener接口,实现接口的两个方法:sessionCre ...
- 利用HttpSessionListener实现网站在线人数统计功能
为什么80%的码农都做不了架构师?>>> 在网站中经常需要进行在线人数的统计.过去的一般做法是结合登录和退出功能,即当用户输入用户名密码进行登录的时候计数器加1,然后当用户点击 ...
- html页面统计在线人数,统计在线人数couter
如何运用内置对象session和application对象实现统计在线人数 首先创建一个全局应用程序类Global.asax protected void Application_Start 这几 ...
最新文章
- Docker Java+Tomcat 环境搭建
- QQ卡机问题解决方法
- QT示例:基于TCP 点对多Socket通讯(server,clients)
- 为什么电脑不能打字_电脑不能打字怎么办?键盘没坏但无法打字的解决方法
- python 获取当前月份月初日期和月末日期
- numpy 索引多个_Numpy基础三,学习Python编程必备
- 一位女孩对男孩的忠告(转贴)
- method swizzling你应该注意的点
- 用友java打不开_用友8.52的版本打不开UFO报表 显示UFOS MFC Application 已停止正常工作 重装软件也没用...
- java 微信小程序 在线学习系统app
- JS(获取浏览器高度)
- 本地文件上传到阿里云生成网址
- 解决Matplotlib中Times New Roman字体无法改变字体
- 珠宝行业电子秤串口程序开发
- STM32CubeIDE使用
- PicPick Pro v7.0.0 屏幕截图编辑工具解锁全功能单文件版
- 大数据与云计算概论2
- BZOJ 3470 Freda’s Walk (期望)
- 足浴报钟器哪个好 足浴按摩手法
- PerformanceManagementSystem
热门文章
- linux课件完整汇总
- 【202106小白训练营】day03-java数据结构
- Java语言程序设计与数据结构(基础篇)梁勇第九章 *9.3
- 一文告诉你车载测试的秘密
- 四级网络工程师试题二
- js生成token 七牛云_自己尝试生成七牛云的accessToken,但一直返回{error:bad token}...
- 11-hive数据查询方式
- 帝国CMS 7.2 蓝色响应式网站模板自适应宽屏智能整站源码 A1
- unity中Camera的Field of View 垂直FOV
- 学校网站建设解决方案_学校网站建设方案怎么写