本文主要介绍通过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());}}}

通过监听器实现在线人数统计相关推荐

  1. linux服务器在线人数,servlet监听器实现在线人数统计源码实例

    servlet监听器实现在线人数统计 一.准备知识 1.servlet:servlet是一种运行服务器端的Java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求 ...

  2. java怎么快速创建监听类_java_利用java监听器实现在线人数统计,1.在工程中创建监听类SessionLi - phpStudy...

    利用java监听器实现在线人数统计 1.在工程中创建监听类SessionListener 并且实现HttpSessionListener接口,代码如下 import javax.servlet.htt ...

  3. Servlet的监听器实现在线人数统计

    目录 一 开发步骤 二 实战 三 测试 一 开发步骤 1 编写监听器 2 注册监听器 二 实战 1 监听器编写 import javax.servlet.ServletContext; import ...

  4. 使用监听器实现一个统计网站在线人数的示例

    (1)创建一个监听器实现类 要大致统计一个网站的在线人数,首先,可以通过ServletContextListener监听,当Web应用上下文启动时,在ServletContext中添加一个List,用 ...

  5. Java监听器实现网站在线人数统计

    1.监听器定义 监听器也叫Listener,是Servlet的监听器,它可以监听客户端的请求.服务端的操作等.通过监听器,可以自动激发一些操作,比如监听在线的用户的数量. 2.常见的监听器 1)Ser ...

  6. SpringMVC的在线人数统计监听器

    一.session简单介绍 在做在线统计人数监听器前,需要先简单了解一下session.         Session存储在服务器端,一般放置在服务器的内存中(为了高速存取),Sessinon在用户 ...

  7. 使用监听器Listener实现在线人数统计功能

    使用监听器Listener实现在线人数统计功能 目录树及使用的文件 1.首先创建一个CountListener类实现HttpSessionListener接口,实现接口的两个方法:sessionCre ...

  8. 利用HttpSessionListener实现网站在线人数统计功能

    为什么80%的码农都做不了架构师?>>>    在网站中经常需要进行在线人数的统计.过去的一般做法是结合登录和退出功能,即当用户输入用户名密码进行登录的时候计数器加1,然后当用户点击 ...

  9. html页面统计在线人数,统计在线人数couter

    如何运用内置对象session和application对象实现统计在线人数 首先创建一个全局应用程序类Global.asax   protected void Application_Start 这几 ...

最新文章

  1. Docker Java+Tomcat 环境搭建
  2. QQ卡机问题解决方法
  3. QT示例:基于TCP 点对多Socket通讯(server,clients)
  4. 为什么电脑不能打字_电脑不能打字怎么办?键盘没坏但无法打字的解决方法
  5. python 获取当前月份月初日期和月末日期
  6. numpy 索引多个_Numpy基础三,学习Python编程必备
  7. 一位女孩对男孩的忠告(转贴)
  8. method swizzling你应该注意的点
  9. 用友java打不开_用友8.52的版本打不开UFO报表 显示UFOS MFC Application 已停止正常工作 重装软件也没用...
  10. java 微信小程序 在线学习系统app
  11. JS(获取浏览器高度)
  12. 本地文件上传到阿里云生成网址
  13. 解决Matplotlib中Times New Roman字体无法改变字体
  14. 珠宝行业电子秤串口程序开发
  15. STM32CubeIDE使用
  16. PicPick Pro v7.0.0 屏幕截图编辑工具解锁全功能单文件版
  17. 大数据与云计算概论2
  18. BZOJ 3470 Freda’s Walk (期望)
  19. 足浴报钟器哪个好 足浴按摩手法
  20. PerformanceManagementSystem

热门文章

  1. linux课件完整汇总
  2. 【202106小白训练营】day03-java数据结构
  3. Java语言程序设计与数据结构(基础篇)梁勇第九章 *9.3
  4. 一文告诉你车载测试的秘密
  5. 四级网络工程师试题二
  6. js生成token 七牛云_自己尝试生成七牛云的accessToken,但一直返回{error:bad token}...
  7. 11-hive数据查询方式
  8. 帝国CMS 7.2 蓝色响应式网站模板自适应宽屏智能整站源码 A1
  9. unity中Camera的Field of View 垂直FOV
  10. 学校网站建设解决方案_学校网站建设方案怎么写