实现session监听器

ARFoundation系列讲解 - 03 ARSession and XROrigin 一、AR运行必要条件 1.在ARFoundation可以使用之前,必须启用提供商插件。您可以在 "菜单栏->Edit->Project Settings.." ,为每个目标平台启用特定的插件。 2.在Hierarchy 窗口中添加了ARSession 和 ARSessionOrigin 两个对象,所有AR功能都以这两个组件为基础。 二、ARSession 组件 ARSession 主要用来管理AR应用的状态和处理AR应用的生命周期。通过启用或禁用ARSession 来控... 阅读详情
监听器概述 

1.Listener是Servlet的监听器    
2.可以监听客户端的请求、服务端的操作等。   
3.通过监听器,可以自动激发一些操作,如监听在线用户数量,当增加一个HttpSession时,给在线人数加1。   
4.编写监听器需要实现相应的接口   
5.编写完成后在web.xml文件中配置一下,就可以起作用了   
6.可以在不修改现有系统基础上,增加web应用程序生命周期事件的跟踪   


常用的监听接口   

Java代码
  1. 1.ServletContextAttributeListener      
  2. 监听对ServletContext属性的操作,比如增加/删除/修改      
  3. 2.ServletContextListener      
  4. 监听ServletContext,当创建ServletContext时,激发 contextInitialized(ServletContextEvent sce)方法;当销毁ServletContext时,激发contextDestroyed(ServletContextEvent sce)方法。      
  5. 3.HttpSessionListener      
  6. 监听HttpSession的操作。当创建一个 Session时,激发session Created(SessionEvent se)方法;当销毁一个Session时,激发sessionDestroyed (HttpSessionEvent se)方法。      
  7. 4.HttpSessionAttributeListener      
  8. 监听HttpSession中的属性的操作。当在Session增加一个属性时,激发 attributeAdded(HttpSessionBindingEvent se) 方法;当在Session删除一个属性时,激发attributeRemoved(HttpSessionBindingEvent se)方法;当在Session属性被重新设置时,激发attributeReplaced(HttpSessionBindingEvent se) 方法。   
1.ServletContextAttributeListener   监听对ServletContext属性的操作,比如增加/删除/修改   2.ServletContextListener   监听ServletContext,当创建ServletContext时,激发 contextInitialized(ServletContextEvent sce)方法;当销毁ServletContext时,激发contextDestroyed(ServletContextEvent sce)方法。   3.HttpSessionListener   监听HttpSession的操作。当创建一个 Session时,激发session Created(SessionEvent se)方法;当销毁一个Session时,激发sessionDestroyed (HttpSessionEvent se)方法。   4.HttpSessionAttributeListener   监听HttpSession中的属性的操作。当在Session增加一个属性时,激发 attributeAdded(HttpSessionBindingEvent se) 方法;当在Session删除一个属性时,激发attributeRemoved(HttpSessionBindingEvent se)方法;当在Session属性被重新设置时,激发attributeReplaced(HttpSessionBindingEvent se) 方法。

使用范例:   
由监听器管理共享数据库连接   

生命周期事件的一个实际应用由context监听器管理共享数据库连接。在web.xml中如下定义监听器:   
Java代码
  1. <listener>      
  2.       <listener-class>XXX.MyConnectionManager</listener-class>      
  3. </listener>  
<listener>       <listener-class>XXX.MyConnectionManager</listener-class>   </listener>
server创建监听器的实例,接受事件并自动判断实现监听器接口的类型。要记住的是由于监听器是配置在部署描述符web.xml中,所以不需要改变任何代码就可以添加新的监听器。   
Java代码
  1.      
  2. public class MyConnectionManager implements ServletContextListener{        
  3. public void contextInitialized(ServletContextEvent e) {       
  4.           Connection con = // create connection       
  5.           e.getServletContext().setAttribute("con", con);       
  6.       }        
  7.    public void contextDestroyed(ServletContextEvent e) {       
  8.           Connection con = (Connection) e.getServletContext().getAttribute("con");       
  9.         try {      
  10.             con.close();       
  11.           }       
  12.        catch (SQLException ignored) { } // close connection       
  13.       }       
  14. }  
public class MyConnectionManager implements ServletContextListener{     public void contextInitialized(ServletContextEvent e) {            Connection con = // create connection            e.getServletContext().setAttribute("con", con);        }        public void contextDestroyed(ServletContextEvent e) {            Connection con = (Connection) e.getServletContext().getAttribute("con");            try {             con.close();            }           catch (SQLException ignored) { } // close connection        }    }    
监听器保证每新生成一个servlet context都会有一个可用的数据库连接,并且所有的连接对会在context关闭的时候随之关闭。     

在web.xml中加入:   
Java代码
  1. <listener><listener-class>servletlistener111111.SecondListener</listener-class> </listener> 
<listener><listener-class>servletlistener111111.SecondListener</listener-class> </listener>

==================================================

关于用户超时的例子:

Java代码
  1. public class OnlineUserListener implements HttpSessionListener {  
  2.     public void sessionCreated(HttpSessionEvent event) {  
  3.       }  
  4.     public void sessionDestroyed(HttpSessionEvent event) {  
  5.           HttpSession session = event.getSession();  
  6.           ServletContext application = session.getServletContext();  
  7.         // 取得登录的用户名  
  8.           String username = (String) session.getAttribute("username");  
  9.         // 从在线列表中删除用户名  
  10.           List onlineUserList = (List) application.getAttribute("onlineUserList");  
  11.           onlineUserList.remove(username);  
  12.           System.out.println(username + "超时退出。");  
  13.       }  
  14. } 
public class OnlineUserListener implements HttpSessionListener {    public void sessionCreated(HttpSessionEvent event) {    }    public void sessionDestroyed(HttpSessionEvent event) {        HttpSession session = event.getSession();        ServletContext application = session.getServletContext();        // 取得登录的用户名        String username = (String) session.getAttribute("username");        // 从在线列表中删除用户名        List onlineUserList = (List) application.getAttribute("onlineUserList");        onlineUserList.remove(username);        System.out.println(username + "超时退出。");    }}

以下两种情况下就会发生sessionDestoryed(会话销毁)事件:

1.执行session.invalidate()方法时。例如:request.getSession().invalidate();

2.如果用户长时间没有访问服务器,超过了会话最大超时时间,服务器就会自动销毁超时的session。会话超时时间可以在web.xml中进行设置。

========================================

使用HttpSessionBindingListener

HttpSessionBindingListener虽然叫做监听器,但使用方法与HttpSessionListener完全不同。我们实际看一下它是如何使用的。

我们的OnlineUserBindingListener实现了HttpSessionBindingListener接口,接口中共定义了两个方法:valueBound()和valueUnbound(),分别对应数据绑定,和取消绑定两个事件。

所谓对session进行数据绑定,就是调用session.setAttribute()把HttpSessionBindingListener保存进session中。我们在LoginServlet.java中进行这一步。

// 把用户名放入在线列表
session.setAttribute("onlineUserBindingListener", new OnlineUserBindingListener(username));
       
这就是HttpSessionBindingListener和HttpSessionListener之间的最大区别:HttpSessionListener只需要设置到web.xml中就可以监听整个应用中的所有session。 HttpSessionBindingListener必须实例化后放入某一个session中,才可以进行监听。

从监听范围上比较,HttpSessionListener设置一次就可以监听所有session,HttpSessionBindingListener通常都是一对一的。

正是这种区别成就了HttpSessionBindingListener的优势,我们可以让每个listener对应一个username,这样就不需要每次再去session中读取username,进一步可以将所有操作在线列表的代码都移入listener,更容易维护。

valueBound()方法的代码如下:

Java代码
  1. public void valueBound(HttpSessionBindingEvent event) {  
  2.       HttpSession session = event.getSession();  
  3.       ServletContext application = session.getServletContext();  
  4.  
  5.     // 把用户名放入在线列表  
  6.       List onlineUserList = (List) application.getAttribute("onlineUserList");  
  7.     // 第一次使用前,需要初始化  
  8.     if (onlineUserList == null) {  
  9.           onlineUserList = new ArrayList();  
  10.           application.setAttribute("onlineUserList", onlineUserList);  
  11.       }  
  12.       onlineUserList.add(this.username);  
  13. } 
public void valueBound(HttpSessionBindingEvent event) {    HttpSession session = event.getSession();    ServletContext application = session.getServletContext();    // 把用户名放入在线列表    List onlineUserList = (List) application.getAttribute("onlineUserList");    // 第一次使用前,需要初始化    if (onlineUserList == null) {        onlineUserList = new ArrayList();        application.setAttribute("onlineUserList", onlineUserList);    }    onlineUserList.add(this.username);}
       
username已经通过构造方法传递给listener,在数据绑定时,可以直接把它放入用户列表。

与之对应的valueUnbound()方法,代码如下:
Java代码
  1. public void valueUnbound(HttpSessionBindingEvent event) {  
  2.       HttpSession session = event.getSession();  
  3.       ServletContext application = session.getServletContext();  
  4.  
  5.     // 从在线列表中删除用户名  
  6.       List onlineUserList = (List) application.getAttribute("onlineUserList");  
  7.       onlineUserList.remove(this.username);  
  8.  
  9.       System.out.println(this.username + "退出。");  
  10. } 
public void valueUnbound(HttpSessionBindingEvent event) {    HttpSession session = event.getSession();    ServletContext application = session.getServletContext();    // 从在线列表中删除用户名    List onlineUserList = (List) application.getAttribute("onlineUserList");    onlineUserList.remove(this.username);    System.out.println(this.username + "退出。");}
       
这里可以直接使用listener的username操作在线列表,不必再去担心session中是否存在username。

valueUnbound的触发条件是以下三种情况:
Java代码
  1. 1.执行session.invalidate()时。  
  2.  
  3. 2.session超时,自动销毁时。  
  4.  
  5. 3.执行session.setAttribute("onlineUserListener", "其他对象");或session.removeAttribute("onlineUserListener");将listener从session中删除时。 
1.执行session.invalidate()时。2.session超时,自动销毁时。3.执行session.setAttribute("onlineUserListener", "其他对象");或session.removeAttribute("onlineUserListener");将listener从session中删除时。

因此,只要不将listener从session中删除,就可以监听到session的销毁。
java一个监听器的例子 立即下载

相关推荐

最优化方法 25:PDHG

前面的章节要么从原始问题出发,要么从对偶问题出发,通过求解近似点或者一个子优化问题进行迭代,而且推导过程中我们发现根据问题的参数特征,比如矩阵 AAA 是瘦高型的还是矮胖型的,采用对偶和原始问题的复杂度会不一样,可以选择一个更简单的。而这一节,我们将要从原始对偶问题出发来优化,什么是原始对偶问题呢?就是原始优化变量和对偶优化变量(原始函数和共轭函数)混合在一块,看下面的原理就知道了。 1. 原始对偶问题 现在考虑原始优化问题,其中 f,gf,gf,g 为闭凸函数 min⁡f(x)+g(Ax) \min \q

Glooow的博客 4601

Servlet Context Listerner in the web.xml

[b]web.xml中--使用监听器Servlet [/b] [u]监听器概述 [/u] 1.Listener是Servlet的监听器 2.可以监听客户端的请求、服务端的操作等。 3.通过监听器,可以自动激发一些操作,如监听在线用户数量,当增加一个HttpSession时,给在线人数加1。 4.编写监听器需要实现相应的接口 5.编写...

hekeji 195

Appstore开发者必读:3.2(f)违规预警与高效申诉指南

本文为AppStore开发者提供了应对3.2(f)违规通知的完整指南。文章深度解析了3.2(f)条款下的隐瞒性、关联性与真实性违规类型,并提供了黄金48小时内的自查、申诉信撰写与提交全流程策略。同时,文章强调遵循App Review Guidelines,建立内部合规清单与保持账号独立,是预防违规、维护开发者账号安全的关键。

weixin_29214559的博客 272

java中的sessionAttribute监听器

private static final String LOGIN_USER=“username”; public void attributeAdded(HttpSessionBindingEvent hs) { //属性监听器在使用session.setAttribute()时触发,判断用户时候重复登陆,或者异地登陆,需要过去用户名,这个时候用它是适合的 // // TODO...

816

相控阵雷达“相控”原理---多张动画示意图完美解释

很容易就能发现,相控阵雷达的天线由无数个小单元天线组成,这些小单元天线叫做“阵元”,对于有源相控阵雷达来说,每一个阵元都是独立控制的,它们既能独立发射雷达波,也能接收雷达波的回波信号。相控阵雷达可以在1秒内关机,1秒内开机,好处是,当军舰遇到依靠雷达信号进行引导的“反雷达导弹”时,可以迅速地把朝向来袭导弹方向的雷达关机,同时,其他方向的雷达保持开启。在过去,军舰上安装有不同种类的雷达,体积庞大、重不说,另一个麻烦是干扰,常常是,一种雷达工作时,另一种雷达就会受到干扰,严重的甚至不能同时工作。

muyangjun的专栏 1万+

Python海康相机api---超简单入坑学习必看

海康官网下载相机驱动​安装好以后找到Python的开发文件目录参考:D:\MVS\MVS\Development\Samples\Python\MvImport这几个文件很重要,想调用海康相机取图会用到.​为了写代码方便可以把这几个文件拷贝一下,跟你的api主文件放在同一个文件夹下可以减少80%的烦恼.​。

weixin_59360687的博客 3478

Session监听器在项目中的使用

session监听器可以用来统计用户在线时长,统计网站的访问人数,以及在线用户。除了session监听器,还有websocket也可以实现这些功能。 我在项目中使用session监听器是用于统计用户在线时长。 1、首先创建MySessionListener并让它实现HttpSessionListener, ServletContextListener接口 实现ServletContextLi...

你的微笑乱了夏天 2348

C#串口通信从入门到精通(27)——高速通信下解决数据处理慢的问题(20ms以内)

本文介绍如何在高速通信情况下解决串口接收的数据来不及处理的问题,由高级工程师多年经验总结而成,绝对是串口领域的实战经验!

qq_34059233的博客 6808

通过实例深入理解监听器

通过实例深入理解监听器一、什么是监听器二、监听器要素三、实现步骤四、实例1.场景描述2.代码实现1)定义监听器接口2)监听者、被监听者3)创建事件对象4)实现监听器接口,分别创建监听者、被监听者的监听实例5)在监听者内部创建触发行为6.)在被监听者内部创建响应行为7)创建测试用例3.功能扩展1)定义监听器接口2)监听者、被监听者3)创建事件对象4)实现监听器接口,创建监听实例5)在监听者内部创建触发行为6.)在被监听者内部创建响应行为7)创建测试用例五、文末 之前写过一个简单监听器的实例文章,想要了解的,可

Ason Blogs 892

【新能源汽车DCDC变换器测试优化全攻略:解决电能质量/发热/过充等核心痛点】

高压直流转12V低压的DCDC变换器是新能源汽车电源系统的核心枢纽,承担着为整车低压附件、控制器及12V蓄电池供电/补电的关键作用。在新能源汽车乘用车、商用车等不同车型实际运营中,因PDU内DC/AC等模块干扰、DCDC自身设计缺陷、整车匹配性不佳及测试验证不充分,频发12V输出电能质量差导致后端元器件烧毁、变换器发热严重、蓄电池过充/欠充、智能补电功能失效等问题,还伴随低压侧电压瞬跌/浪涌、电磁干扰超标、振动后接触不良、高温下效率骤降等行业高频故障,直接影响整车可靠性和运营安全性。本文基于国标。

优快云-新能源汽车研发测试专业博主 1266

RK3568项目(四)--uboot启动流程之启动模式选择

本章接着上面,接着来分析uboot启动流程,设计vendor、按键、驱动模式的选择等

文艺小少年的博客 584

java session监听器_实现session监听器

监听器概述1.Listener是Servlet的监听器2.可以监听客户端的请求、服务端的操作等。3.通过监听器,可以自动激发一些操作,如监听在线用户数量,当增加一个HttpSession时,给在线人数加1。4.编写监听器需要实现相应的接口5.编写完成后在web.xml文件中配置一下,就可以起作用了6.可以在不修改现有系统基础上,增加web应用程序生命周期事件的跟踪常用的监听接口Java代码1.Se...

weixin_32515741的博客 1238

Windows部署OpenClaw报错不断?这篇环境配置指南帮你解决难题

想在Windows上部署OpenClaw却频频报错?🔧 本文详细梳理了OpenClaw部署必需环境的安装步骤和官方下载地址 📦,提供完整的验证清单和常见问题排查方法,帮你一次性搞定所有环境配置,顺利部署OpenClaw ✅

XiaoqiangClub的博客 6629

监听器Listener(application、session监听器的实现以及session属性的监听器)

Listener的作用: Listener是Servlet规范的另一个高级特性,用于监听Java Web程序中的事件,例如创建、销毁session、request、context等,并触发相应的事件,事件发生的时候会自动触发该事件对应的Listener。 Java Web程序也一样,使用Listener和Event完成相应事件的处理。 监听器Listener的配置: //application...

Denial_learn的博客 955

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

使用Session监听器实现统计在线人数

使用Session监听器实现统计在线人数 1.工作目录结构 包含监听器类和jsp页面 2.session监听器 首先利用session监听器来实现对访问网站时的session计数,当有session创建+1,有session销毁-1。 2.jsp页面 沿用之前写的静态html页面代码(https://www.cnblogs.com/zst18980621948/p/1...

admin270492705的博客 1007

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

JavaWeb——Filter过滤器和session监听器的实现

文章目录JavaWeb——Filter过滤器和session监听器1. Filter:过滤器2. Filter开发步骤3. Filter实现权限拦截4. session监听器 JavaWeb——Filter过滤器和session监听器 1. Filter:过滤器 通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。 Filt

万里顾一程的博客 2308

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

java session监听器_利用java监听器实现在线人数统计

本文实例为大家分享了java监听器实现在线人数统计的具体代码,供大家参考,具体内容如下1.在工程中创建监听类SessionListener 并且实现HttpSessionListener接口,代码如下import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;public clas...

weixin_39564368的博客 309

过滤器和监听器实现用户的在线登录人数,以及设置session时长。

过滤器: package com.bjsxt.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; ...

欢迎来到我的博客,一起学习Java! 832

web监听器监听mysql_实现session监听器

1.ServletContextAttributeListener监听对ServletContext属性的操作,比如增加/删除/修改2.ServletContextListener监听ServletContext,当创建ServletContext时,激发 contextInitialized(ServletContextEvent sce)方法;当销毁ServletContext时,激发cont...

weixin_30981569的博客 250

配置Session监听器实现用户数据控制

如果要实现在线用户数量统计,可以在WEB.xml配置Session的监听器:   &lt;!-- Session 监听器 --&gt; &lt;listener&gt; &lt;listener-class&gt; com.cpic.ryx.servlet.SessionCounterListener &lt;/listener-class&gt; &lt;/li...

jxdwuao的专栏 229

在Struts2下使用[拦截器]配合[session监听器]实现在线会员统计与防止重复登录

在Struts2下使用[拦截器]配合[session监听器]实现在线会员统计与防止重复登录 需求: 1.管理员后台可显示当前在线访客数以及在线会员数(在线会员要求列出详细清单). 2.某个客户端非法退出(直接关闭浏览器或断电啥的)后,接着他重新登录系统.在线统计上要做到保持登录统计的准确性与完整性. 3.防止多个客户端同时使用一个帐户异地登录(后登录者踢掉先登录者,并通

gaoqiao1988的专栏 695
上一篇: windows server 2008+IIS7+ASP Access .microsoft jet database engine 80004005错误
下一篇: tomcat配置虚拟主机
keepAction
博客等级 码龄15年 28粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值