使用HttpSessionListener监听器 监控当前网站在线人数

Listener系列教材 (五)- 借助Session监听器统计当前在线人数 这个文件是tomcat存放以前的session的,为了观察到创建session的活动,需要tomcat重启之前把以前的session都清除掉,才能观察到新创建session的活动。一旦一个用户访问服务器,就会创建一个session. 如果该用户持续访问,那么该session会持续有效。,该用户也没有做任何操作,就表示该用户“下线” 了,其对应的session也会被销毁。当创建一个session的时候,就把数字+1,并且放在application里。当销毁一个session的时候,把这个数字-1。 阅读详情
ServletAPI提供了大量的监听器来监听WEB应用的内部事件,以下简单利用HttpSessionListener监听器来实现监控当前网站的在线人数。

相应代码如下:

  1. package neo.app.servlet;  
  2.   
  3. import java.util.HashSet;  
  4. import java.util.Map;  
  5.   
  6. import javax.servlet.ServletContext;  
  7. import javax.servlet.http.HttpSession;  
  8. import javax.servlet.http.HttpSessionEvent;  
  9. import javax.servlet.http.HttpSessionListener;  
  10.   
  11. import neo.app.service.ServiceManager;  
  12. import neo.core.Constants;  
  13. import neo.core.bean.BeanManager;  
  14.   
  15. import org.apache.commons.logging.Log;  
  16. import org.apache.commons.logging.LogFactory;  
  17.   
  18. /** 
  19.  * 用于记录在线人数,用户退出日志写入 
  20.  * 
  21.  */  
  22. public class SessionListener implements HttpSessionListener {  
  23.     private final Log log = LogFactory.getLog(getClass());  
  24.     private final String COUNT_KEY = "sessions";  
  25.   
  26.     /** 
  27.      * session创建时执行的方法,用户登录时执行 
  28.      */  
  29.     public void sessionCreated(HttpSessionEvent event) {  
  30.         HttpSession session = event.getSession();  
  31.         ServletContext application = session.getServletContext();  
  32.   
  33.         // 在application范围由一个HashSet集保存所有的session   
  34.         HashSet sessions = (HashSet) application.getAttribute(COUNT_KEY);  
  35.         if (sessions == null) {  
  36.             sessions = new HashSet();  
  37.             application.setAttribute(COUNT_KEY, sessions);  
  38.         }  
  39.   
  40.         // 新创建的session均添加到HashSet集中   
  41.         sessions.add(session);  
  42.   
  43.         // 然后使用sessions.size()获取当前活动的session数,即为“在线人数”   
  44.         log.debug("sessionCreated 网站在线人数(含未登录的访问) 为:" + sessions.size());  
  45.   
  46.         //由于此处无法获得登录用户的IP信息  
  47.         //用户登录日志转向到用户登录action中完成  
  48.     }  
  49.   
  50.     /*** 
  51.      * session销毁时执行的方法,用户主动退出/浏览器关闭Session过期 时执行 
  52.      */  
  53.     public void sessionDestroyed(HttpSessionEvent event) {  
  54.         HttpSession session = event.getSession();  
  55.         ServletContext application = session.getServletContext();  
  56.         HashSet sessions = (HashSet) application.getAttribute(COUNT_KEY);  
  57.   
  58.         if (null != sessions && sessions.contains(session)) {  
  59.             Object userObj = session.getAttribute(Constants.LOGIN_USER);  
  60.             log.debug("userObj is:" + userObj);  
  61.             if (userObj != null) {//判断是否为登录后包含用户信息的数据(已经登录)  
  62.                 Map userMap = (Map) userObj;  
  63.                 String username = (String) userMap.get("username");  
  64.                 log.debug("用户" + username + "退出");  
  65.                 Long loginid = (Long) userMap.get(Constants.LOGIN_LOGID);  
  66.                 //调用memberService来进行用户退出日志写入  
  67.                 ((ServiceManager) BeanManager.getBean("serviceManager")).getMemberService().insertLogoutLog(loginid,  
  68.                         username);  
  69.             } else {//未进行登录  
  70.                 log.debug("session存在,但是尚未进行用户登录");  
  71.             }  
  72.         } else {  
  73.             //session已经不存在此退出对象了  
  74.             log.debug("session已经不存在此退出对象了");  
  75.         }  
  76.   
  77.         // 销毁的session均从HashSet集中移除   
  78.         if (sessions != null) {  
  79.             sessions.remove(session);  
  80.             //更新在线人数数据  
  81.             log.debug("sessionDestroyed 网站在线人数(含未登录的访问) 为:" + sessions.size());  
  82.         }  
  83.     }  
  84.   
  85. }  

当然最后别忘了在web.xml文件中对监听器进行配置,配置也很简单,如下

  1. <listener>   
  2.        <listener-class>neo.app.servlet.SessionListener</listener-class>   
  3.    </listener>  
Python爬虫实战:西瓜视频m3u8解析与FFmpeg下载合并 网络爬虫与流媒体解析是Python工程实践中的常见需求,其核心在于通过HTTP请求获取数据并解析特定格式。m3u8作为HLS协议索引文件,将视频切分为ts分片,便于流式传输。结合FFmpeg的多线程处理能力,可高效完成分片下载与合并,技术价值在于提升视频处理效率。典型应用场景包括视频下载、离线缓存等。本文以西瓜视频为例,详细讲解如何使用requests库提取m3u8地址,并调用FFmpeg批量下载ts分片合并为mp4,涵盖请求伪装、索引解析及常见问题排查。 阅读详情

相关推荐

Vc出现不能连接到一个或多个 vCenter server 系统:http://vcenter-vx.utibet.edu.cn:443/sdk

问题描述: 解决办法: esxi6.7的bug 第一种通过升级系统来解决问题 第二种是通过删除数据来解决 第一步:进入到esxi的shell 第二步查看其中的服务开启状态 第二步 df -h 第三步 /opt/vmware/vpostgres/current/bin/psql -d VCDB -U postgres 第四步 SELECT nspname || '.' || relname AS "relation", pg_size_pretty(pg_total_relation_size(C.oi

m0_49328536的博客 9901

Servlet HttpSessionListener监听器统计网站在线人数

在许多网站或者软件应用中都有统计当前在线人数这一功能。在通常情况下,当一个用户进入网站时就会创建一个 HttpSession 对象,而当用户离开网站时,HttpSession 对象就会被销毁。

unber的博客 1126

Cursor3.0新界面使用说明

本文摘要:Cursor 3.x版本更新后,提供了两套主界面:Editor(类似VSCode的代码编辑器)和AgentsWindow(以AI智能体为中心的新界面)。Editor适合日常编码,AgentsWindow则支持并行运行多个AI任务、云端协作和多仓库管理。通过Ctrl+E可快速切换布局。文章详细介绍了AI聊天面板的操作技巧、四种工作模式(Agent/Plan/Ask/Debug)的区别,以及AgentsWindow的多任务管理功能。同时提供了Windows快捷键速查、中文化设置方法,并对比了新旧版本的

2501_90421497的博客 728

2019.10.27作业-----监听器实现在线人数统计

监听器实现在线人数统计 利用session监听器来实现对访问网站时的session计数,当有session创建+1,有session销毁-1。 监听器 import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; /** * 监听器实现在线人数统计 * @author hq...

hqr111的博客 238

薛定谔虚拟筛选实战:如何用PDB文件快速构建受体格点(避坑指南)

本文提供了薛定谔虚拟筛选实战指南,聚焦于如何从PDB文件快速、精准地构建受体格点。文章详细解析了可变残基的理性处理策略、基于配体尺寸的盒子量化设置方法,并分享了高级约束与排除体积的实战技巧,旨在帮助用户避开常见陷阱,提升虚拟筛选的成功率与效率。

weixin_28419039的博客 254

蛋白质组学进阶指南 | (八)差异蛋白筛选与功能解析实战

本文是蛋白质组学差异蛋白筛选与功能解析的实战指南。详细讲解了如何利用R语言的limma包进行差异表达分析,结合FDR校正和差异倍数设定筛选关键蛋白,并通过火山图可视化结果。进一步介绍了使用clusterProfiler进行GO与KEGG功能富集分析,以及利用STRING数据库和Cytoscape构建蛋白互作网络以识别枢纽分子,最终串联分析形成可验证的生物学假说。

weixin_29208077的博客 745

实验六~Web事件处理与过滤器

实验六~~~

qq_58284486的博客 1947

运放偏置电路设计:如何精准计算差分放大器的电压偏移量

本文深入解析了差分放大器偏置电路的设计原理与精准计算方法,重点阐述了如何通过引入参考电压实现信号电压偏移,以适应单电源ADC的输入范围。文章结合实战案例,详细推导了偏移电压公式,并强调了电阻匹配、运放选型及PCB布局对精度和共模抑制比的关键影响,帮助硬件工程师避免常见设计陷阱。

weixin_29288313的博客 637

springboot使用HttpSessionListener 监听器统计当前在线人数

概括: request.getSession(true):若存在会话则返回该会话,否则新建一个会话。 request.getSession(false):若存在会话则返回该会话,否则返回NULL https://blog.youkuaiyun.com/qq_38091831/article/details/82912831 原理就是很简单,就是利用HttpSessionListen...

weixin_30648587的博客 747

保姆级教程:用CH34xSerCfg工具修改USB转串口芯片的VID/PID,避免驱动冲突

本文详细介绍了如何使用CH34xSerCfg工具修改USB转串口芯片的VID/PID,解决驱动冲突问题。通过实战案例和配置技巧,帮助开发者高效管理嵌入式设备,避免常见的USB设备识别问题,提升开发效率。

weixin_30924239的博客 225

[NoC]Outstanding和Credit的概念详解

摘要:本文详细解析了计算机体系结构中outstanding和credit两个核心概念。outstanding指已发出但未完成的请求数量,通过跟踪未决事务实现并发和乱序执行,常见于AXI总线等场景;credit则是基于信用令牌的流控机制,通过控制发送速率防止接收端缓冲溢出,多用于NoC网络。二者在目的、机制上存在差异:outstanding侧重提升并发度,credit关注流控保护。文章通过AXI协议实例和SystemC代码示例展示了二者的应用与结合方式,并探讨了在SoC设计中参数优化的方法,包括性能/资源权衡

元直的博客 2285

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

(1)创建一个监听器实现类 要大致统计一个网站的在线人数,首先,可以通过ServletContextListener监听,当Web应用上下文启动时,在ServletContext中添加一个List,用来准备存放在线的用户名;然后,可以通过HttpSessionAttributeListener监听,当用户登录成功把用户名设置到Session中时同时将用户名存放到ServletContext中

LiMing_0820的博客 2485

MAVLink协议详解

MAVLink是为微型飞行器MAV(Micro Air Vehicle)设计的(LGPL)开源的通讯协议。是无人飞行器和地面站(Ground Control Station ,GCS)之间,以及无人飞行器之间通讯常用的协议。APM、PIXHAWK飞控,Mission Planner、QGroundControl地面站均使用了MAVLink协议进行通讯。 MAVLink源码下载地址(现已更新至v2.0):https://github.com/mavlink/qgroundcontrol   用户手册:ht

程序猿老樊的博客 7709

使用监听器统计当前在线人数

使用监听器统计当前在线人数 @WebListener public class MyListener implements HttpSessionListener { @Override public void sessionCreated(HttpSessionEvent httpSessionEvent) { //获取Application对象 ServletContext sc = httpSessionEvent.getSession().getSer

weixin_45290168的博客 477

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

监听器统计当前在线人数

OnlineListener 实现接口HttpSessionListener package listener; import javax.servlet.ServletContext; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public cl...

qq_42551361的博客 453

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

监听器:统计在线人数

在线用户使用HttpSessionListener监听器统计 每当一个session会话建立 在线用户人数+1 使用ServletRequestListener监听器统计用户信息 新建一个CountListener public void sessionCreated(HttpSessionEvent se) { /* Session is created. */ ...

jefferyfg的博客 356

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

利用HttpSessionListener统计在线人数

JSP显示在线人数代码 /** * 编写以下SessionCounter.java * 并编译为SessiionCounter.class * 然后放到你的网站的classpath的 * SessionCount(自己建立此目录)下面 */    package SessionCount;  import javax.servlet.*;  i

时代的过客 542

java监听器统计在线人数案例

package com.zxl.listener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class OnlineCountServletContextListener implements ServletContextListener { ...

学亮编程手记 936

HttpSessionListener监听实现监控在线人数

HttpSessionListener监听实现监控在线人数: OnlieSession.java package com.xzq; import javax.servlet.annotation.WebListener; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; @WebListener

玩转Java 723

java侦听url_Java基于servlet监听器实现在线人数监控功能的方法

本文实例讲述了Java基于servlet监听器实现在线人数监控功能的方法。分享给大家供大家参考,具体如下:1、分析:做一个网站在线人数统计,可以通过ServletContextListener监听,当Web应用上下文启动时,在ServletContext中添加一个List.用来准备存放在线的用户名,然后通过HttpSessionAttributeListener监听,当用户登录成功,把用户名设置到...

weixin_36485103的博客 379

实现当前登录在线人数统计

实现当前登录在线人数统计

weixin_51288065的博客 522

Listener--HttpSessionListener、ServletRequestListener接口的使用详解

HttpSessionListner HttpSessionListner监听的是HttpSession域对象的创建与销毁 HttpSession对象的生命周期: 何时创建:第一次调用request.getSession时创建 何时销毁:服务器关闭销毁、session过期、手动销毁 HttpSessionListener的方法: 实例:使用HttpSessionListener统计网站在线人...

吴声子夜歌的博客 2458

利用servlet的监听器实现在线人数监控的功能

1、分析: 做一个网站在线人数统计,可以通过ServletContextListener监听,当Web应用上下文启动时,在ServletContext中添加一个List.用来准备存放在线的用户名,然后通过HttpSessionAttributeListener监听,当用户登录成功,把用户名设置到Session中。同时将用户名方法到ServletContext的List中,最后通过HttpSess

4333

servlet-监听器与应用

监听器常用的用途: 统计在线人数,利用HttoSessionListener 加载初始化信息:利用ServletContextListener 统计网站访问量 实现访问监控 监听器的分类 ServletContext监听 ServletContextListener:用于对Servlet整个上下文进行监听(创建、销毁) public void contextInitialized(Servlet...

HadwinLing 299

httplistener java_Java监听器Listener使用详解

监听器用于监听web应用中某些对象、信息的创建、销毁、增加,修改,删除等动作的发生,然后作出相应的响应处理。当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。常用于统计在线人数和在线用户,系统加载时进行信息初始化,统计网站的访问量等等。分类:按监听的对象划分,可以分为ServletContext对象监听器HttpSession对象监听器ServletRequest对象监听器按监听的...

weixin_42534103的博客 536

jsp监听器实现在线人数统计

在网站中经常需要进行在线人数的统计。过去的一般做法是结合登录和退出功能,即当用户输入用户名密码进行登录的时候计数器加1,然后当用户点击退出按钮退出系统的时候计数器减1。这种处理方式存在一些缺点,例如:用户正常登录后,可能会忘记点击退出按钮,而直接关闭浏览器,导致计数器减1的操作没有及时执行;网站上还经常有一些内容是不需要登录就可以访问的,在这种情况下也无法使用上面的方法进行在线人数统计。   我们

Saltwater_leo的专栏 5101
上一篇: dom4j解析xml字符串
下一篇: malloc和new的区别
gwpJava
博客等级 码龄14年 11粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值