`

谈谈Listener Servlet的应用

阅读更多

 

    Listener是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。当增加一个HttpSession时,就激发sessionCreated(HttpSessionEvent se)方法,这样就可以给在线人数加1。常用的监听接口有以下几个:
    

  • ServletContextAttributeListener监听对ServletContext属性的操作,比如增加、删除、修改属性。
        
  • ServletContextListener监听ServletContext。当创建ServletContext时,激发contextInitialized(ServletContextEvent sce)方法;当销毁ServletContext时,激发contextDestroyed(ServletContextEvent sce)方法。
        
  • HttpSessionListener监听HttpSession的操作。当创建一个Session时,激发session Created(HttpSessionEvent se)方法;当销毁一个Session时,激发sessionDestroyed (HttpSessionEvent se)方法。
        
  • HttpSessionAttributeListener监听HttpSession中的属性的操作。当在Session增加一个属性时,激发attributeAdded(HttpSessionBindingEvent se) 方法;当在Session删除一个属性时,激发attributeRemoved(HttpSessionBindingEvent se)方法;当在Session属性被重新设置时,激发attributeReplaced(HttpSessionBindingEvent se) 方法。

        下面我们开发一个具体的例子,这个监听器能够统计在线的人数。在ServletContext初始化和销毁时,在服务器控制台打印对应的信息。当ServletContext里的属性增加、改变、删除时,在服务器控制台打印对应的信息。

        要获得以上的功能,监听器必须实现以下3个接口:
        

  • HttpSessionListener
        
  • ServletContextListener
        
  • ServletContextAttributeListener

        我们看具体的代码,见示例14-9。

        【程序源代码】

    1	// ==================== Program Discription =====================
    2	// 程序名称:示例14-9 : EncodingFilter .java
    3	// 程序目的:学习使用监听器
    4	// ==============================================================
    5	import javax.servlet.http.*;
    6	import javax.servlet.*;
    7
    8	public class OnLineCountListener implements HttpSessionListener,
    ServletContextListener,ServletContextAttributeListener
    9	{
    10		private int count;
    11		private ServletContext context = null;
    12		
    13		public OnLineCountListener()
    14		{
    15			count=0;
    16			//setContext();
    17		}
    18		//创建一个session时激发
    19		public void sessionCreated(HttpSessionEvent se) 
    20		{
    21			count++;
    22			setContext(se);
    23			
    24		}
    25		//当一个session失效时激发
    26		public void sessionDestroyed(HttpSessionEvent se) 
    27		{
    28			count--;
    29			setContext(se);
    30		}
    31		//设置context的属性,它将激发attributeReplaced或attributeAdded方法
    32		public void setContext(HttpSessionEvent se)
    33		{
    34			se.getSession().getServletContext().
    setAttribute("onLine",new Integer(count));
    35		}
    36		 //增加一个新的属性时激发
    37		public void attributeAdded(ServletContextAttributeEvent event) {
    38	
    39		log("attributeAdded('" + event.getName() + "', '" +
    40		    event.getValue() + "')");
    41	
    42	    }
    43	    
    44	   //删除一个新的属性时激发
    45	    public void attributeRemoved(ServletContextAttributeEvent event) {
    46
    47		log("attributeRemoved('" + event.getName() + "', '" +
    48		    event.getValue() + "')");
    49	
    50	    }
    51
    52		//属性被替代时激发
    53	    public void attributeReplaced(ServletContextAttributeEvent event) {
    54	
    55			log("attributeReplaced('" + event.getName() + "', '" +
    56			    event.getValue() + "')");
    57	    }
    58	    //context删除时激发
    59	     public void contextDestroyed(ServletContextEvent event) {
    60	
    61			log("contextDestroyed()");
    62			this.context = null;
    63	
    64	    }
    65	
    66	    //context初始化时激发
    67	    public void contextInitialized(ServletContextEvent event) {
    68	
    69			this.context = event.getServletContext();
    70			log("contextInitialized()");
    71	
    72	    }
    73	    private void log(String message) {
    74	
    75		    System.out.println("ContextListener: " + message);
    76	    }   
    77	}

        【程序注解】
        在OnLineCountListener里,用count代表当前在线的人数,OnLineCountListener将在Web服务器启动时自动执行。当OnLineCountListener构造好后,把count设置为0。每增加一个Session,OnLineCountListener会自动调用sessionCreated(HttpSessionEvent se)方法;每销毁一个Session,OnLineCountListener会自动调用sessionDestroyed(HttpSessionEvent se)方法。当调用sessionCreated(HttpSessionEvent se)方法时,说明又有一个客户在请求,此时使在线的人数(count)加1,并且把count写到ServletContext中。ServletContext的信息是所有客户端共享的,这样,每个客户端都可以读取到当前在线的人数。

    为了使监听器生效,需要在web.xml里进行配置,如下所示:

    <listener>
            <listener-class>OnLineCountListener</listener-class>
        </listener>

    测试程序:

    <%@ page contentType="text/html;charset=gb2312" %>

    目前在线人数:

    <font color=red><%=getServletContext().getAttribute("onLine")%></font><br>

    退出会话:

    <form action="exit.jsp" method=post>
    <input type=submit value="exit">
    </form>

    getServletContext().getAttribute("onLine")获得了count的具体值。客户端调用

    <%session.invalidate() ;%>

        使Session失效,这样监听器就会使count减1。

        【运行程序】
        web.xml做好以上的配置,把OnLineCountListener放在WEB-INF/class目录下,启动Web服务器,在浏览器里输入以下URL(根据具体情况不同):http://127.0.0.1:8080/ch14/listener.jsp

        浏览器将会打印目前在线人数。在服务器端有以下输出:

    …
    ContextListener: contextInitialized()
    ContextListener: attributeReplaced('org.apache.
    catalina.WELCOME_FILES', '[Ljava.lang.String;@1d98a')
    …
    ContextListener: attributeAdded('onLine', '1')
    ContextListener: attributeReplaced('onLine', '1')
    ContextListener: attributeReplaced('onLine', '0')
    ContextListener: attributeReplaced('onLine', '1')
    ContextListener: attributeReplaced('onLine', '2')

  • 分享到:
    评论

    相关推荐

      实验5 过滤器、监听器以及MVC + DAO设计模式应用开发实验源代码(1-4).rar

      在本实验中,我们将深入探讨Java Web开发中的关键概念,包括过滤器(Filter)、监听器(Listener)以及Model-View-Controller(MVC)和Data Access Object(DAO)设计模式的应用。这些技术对于构建可扩展、高效且...

      JAVA6高级编程代码14

      在JAVA6中,使用Filter和Listener可以实现更灵活的控制流和监听器功能,例如登录验证、日志记录和会话管理。另外,AJAX(Asynchronous JavaScript and XML)技术也在JAVA6中得到了广泛应用,通过XMLHttpRequest对象...

      war_ml

      此外,配置文件(如web.xml)定义了应用的部署细节,如Servlet映射、过滤器链和监听器配置。 为了将机器学习模型整合进WAR文件,开发者可能使用了某种服务化架构,例如RESTful API,使得前端HTML可以通过HTTP请求...

      基于SpringBoot的“古城景区管理系统”的设计与实现(源码+数据库+文档+PPT).zip

      系统通过提供详尽的热门景点、客房类型、酒店信息、美食类型、特色美食、文创产品及导游服务,使游客能够深入了解古城的历史与文化。该系统集成了导游预约、景点类型、热门景点、门票订单、客房类型、酒店信息、酒店预订、美食类型、特色美食等模块,使得管理人员可以实时监控游客流量、维护设施安全,并通过数据洞察来优化运营策略。系统支持在线订票、智能推荐路线等功能,为游客带来便捷的旅行体验,也帮助管理者更有效地保护和利用文化遗产资源。

      深入探讨:ADRC自抗扰控制技术与先进PID算法的比较研究,探索现代控制技术:ADRC PID自抗扰控制算法的先进性与应用,ADRC PID自抗扰控制(ADRC)当前最先进PID算法 ,ADRC;

      深入探讨:ADRC自抗扰控制技术与先进PID算法的比较研究,探索现代控制技术:ADRC PID自抗扰控制算法的先进性与应用,ADRC PID自抗扰控制(ADRC)当前最先进PID算法 ,ADRC; 自抗扰控制; 先进PID算法,先进自抗扰控制:ADRC PID算法的实践与应用

      【weixin9163】基于微信小程序的校园二手交易平台系统设计与开发+ssm.zip

      技术选型 【后端】:Java 【框架】:springboot/ssm 【前端】:小程序 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 资源包含项目源码+数据库脚本+万字文档。 项目包含前后台完整源码,都经过本人调试,确保可以正常运行! 具体项目介绍可查看博主文章或私聊获取。 也可提供远程调试、二次开发、项目讲解服务,有意向可私聊。 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧!

      【weixin9269】基于vue的青少年科普教学系统平台springboot.zip

      技术选型 【后端】:Java 【框架】:springboot/ssm 【前端】:小程序 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 压缩包包含项目源码+数据库脚本+万字文档。 项目包含前后台完整源码,都经过本人调试,确保可以正常运行! 具体项目介绍可查看博主文章或私聊获取。 也可提供远程调试、二次开发、项目讲解服务,有意向可私聊。 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧!

      基于2018-06-06版本的HyperLPR的Python克隆设计源码

      该项目是对HyperLPR 2018-06-06版本的Python克隆设计源码,包含499个文件,涵盖CMake、TXT、C++、Python、Java、HTML等多种语言,包括70个CMake文件、59个TXT文件、40个C++文件、36个PNG图片文件等,旨在实现与原HyperLPR项目相似的功能。

      薅羊毛拼团商城小程序v2.8.6+前端.zip

      薅羊毛拼团商城小程序v2.8.6+前端 1、怎么玩? 多人拼团,部分人获得得商品,没获得商品的人退款并瓜分红包,红包佣金从获得商品的人的订单利润里返。 2、参与拼团的人需要支付多少钱? 每个人需要支付商品规定的卖价金额,一元购模式的大家分担模式不一样。 3、用户那么积极拼团还不一定能得到,就表明这个产品肯定很便宜,远玩低于市场价。那个这利产品利润还有吗?有得利润还要抽出一部份来发红包? 商品定价由平台定,市场都是由于信息不透明,拼多多上的商品已经买很便宜的,但是商家还在一直做优惠券和花钱打广告,说明产品利润空间不小,平台算好利润空间就行;对于积极拼团没获得商品的说法,举个例子:你很想要一个商品,拼团失败还能领红包,而且可以无数次拼团,拼的次数多了我一定会拿到商品的,还能领红包。 4、平台怎么获利? 获取商品的用户订单抽佣。

      纯电动车VCU控制策略模型详解:基于量产模型的完整控制策略模块分析,纯电动车VCU控制策略模型详解:量产控制策略模块全解析,纯电动车VCU控制策略模型 量产模型,包含纯电动汽车完整控制策略模块,详细见

      纯电动车VCU控制策略模型详解:基于量产模型的完整控制策略模块分析,纯电动车VCU控制策略模型详解:量产控制策略模块全解析,纯电动车VCU控制策略模型 量产模型,包含纯电动汽车完整控制策略模块,详细见图片。 没有说明文档,模型结构清楚,容易理解。 ,核心关键词:纯电动车;VCU控制策略模型;量产模型;完整控制策略模块;模型结构;易理解。,纯电动VCU控制策略量产模型,一图看懂电动车控制逻辑。

      基于FPGA的FIR数字滤波器设计(使用quartus与vivado程序设计及仿真指南),基于FPGA的FIR数字滤波器设计:从MATLAB系数生成到仿真成功的全面指南,含quartus和vivado

      基于FPGA的FIR数字滤波器设计(使用quartus与vivado程序设计及仿真指南),基于FPGA的FIR数字滤波器设计:从MATLAB系数生成到仿真成功的全面指南,含quartus和vivado程序设计及波形视频,基于FPGA的FIR数字滤波器设计(quartus和vivado程序都有)。 附: 1.配套quartus从MATLAB系数生成直到仿真成功说明文档。 2.配套仿真出波形的视频。 ,FPGA; FIR数字滤波器设计; quartus; vivado程序; MATLAB系数生成; 仿真成功说明文档; 仿真波形视频。,基于FPGA的FIR数字滤波器设计:Quartus与Vivado实现与MATLAB系数转换仿真视频指南

      【weixin9087】基于微信小程序的社区养老服务+ssm.zip

      技术选型 【后端】:Java 【框架】:springboot/ssm 【前端】:小程序 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 压缩包包含项目源码+数据库脚本+万字文档。 项目包含前后台完整源码,都经过本人调试,确保可以正常运行! 具体项目介绍可查看博主文章或私聊获取。 也可提供远程调试、二次开发、项目讲解服务,有意向可私聊。 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧!

      基于Cpp11实现的高性能Web服务器,可对上传的图像进行边缘检测。.zip(毕设&课设&实训&大作业&竞赛&项目)

      项目工程资源经过严格测试运行并且功能上ok,可复现复刻,拿到资料包后可实现复刻出一样的项目,本人系统开发经验充足(全栈),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助 【资源内容】:包含源码、工程文件、说明等。资源质量优质,放心下载使用!可实现复现;设计报告可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,及时抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 质量优质,放心下载使用。下载后请首先打开说明文件(如有);项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,网络商品/电子资源资料,勿用于商业用途。质量优质,放心下载使用。

      基于PMSM永磁同步电机无位置传感器FOC控制策略的SVPWM调制与双闭环PI调节器自建仿真模型在Matlab Simulink中的实现与应用,基于PMSM永磁同步电机无位置传感器FOC控制策略的SV

      基于PMSM永磁同步电机无位置传感器FOC控制策略的SVPWM调制与双闭环PI调节器自建仿真模型在Matlab Simulink中的实现与应用,基于PMSM永磁同步电机无位置传感器FOC控制策略的SVPWM调制与双闭环PI调节器自建仿真模型在Matlab Simulink平台搭建与应用,PMSM永磁同步电机矢量控制无位置传感器无传感器foc自建仿真模型,使用SVPWM调制,使用pi调节器,包括电流控制环和转速控制环双闭环控制调节,基于matlab simulink搭建 ,PMSM; 永磁同步电机; 矢量控制; 无位置传感器; 无传感器FOC; SVPWM调制; Pi调节器; 双闭环控制; Matlab Simulink仿真模型。,PMSM无传感器FOC矢量控制双闭环仿真模型

      开源风机控制代码,基于国产MCU与龙博格电机观测器,含SVPWM与多段式调制源码,原理图与详细注释,可移植到其他MCU平台,基于国产MCU芯片的全开源无感FOC风机控制代码,含龙博格电机观测器及SVP

      开源风机控制代码,基于国产MCU与龙博格电机观测器,含SVPWM与多段式调制源码,原理图与详细注释,可移植到其他MCU平台,基于国产MCU芯片的全开源无感FOC风机控制代码,含龙博格电机观测器及SVPWM调制技术,全开源代码,无感FOC控制风机代码 全开源代码,代码基于国产MCU芯片,大厂成熟风机量产程序,龙博格电机观测器观测角度,SVPWM,支持顺逆风启动,五段式与七段式调制等源码。 国产大部分芯片通用,不是一般代码可比的。 是资料,不是实物 包含原理图和程序源代码,程序部分有注释和说明,全开源代码,支持移植到其它的MCU平台。 ,全开源代码; 无感FOC控制; 国产MCU芯片; 成熟风机量产程序; 龙博格电机观测器; SVPWM; 顺逆风启动; 五段式与七段式调制; 通用; 移植; 原理图; 程序源代码。,全开源国产MCU风控系统代码:支持五七段调制、顺逆风启动,可移植至多平台

      电动汽车备用能力的市场机制分析与策略优化:实例探讨充电合约、电价响应及市场设计对备用能力的影响,电动汽车备用能力的评估:考虑市场机制与用户响应的充电策略与案例分析,电动汽车备用能力分析 对电动汽车备用

      电动汽车备用能力的市场机制分析与策略优化:实例探讨充电合约、电价响应及市场设计对备用能力的影响,电动汽车备用能力的评估:考虑市场机制与用户响应的充电策略与案例分析,电动汽车备用能力分析 对电动汽车备用能力的评估需置于合理的、计及用户响应意愿的市场机制下来考察。 首先设计出兼顾系统调控需求与用户出行需求的充(放)电合约机制,提出了EV短时备用能力计算方法和响应电价变化的有序充/放电策略。 基于上述模型或方法,实例分析了典型EV单体及集群在不同充电策略下,向电网提供多种可调控备用容/电量产品的能力。 同时进一步分析了备用容量价格、备用市场设计等因素对eV可申报备用容量的影响。 ,电动汽车备用能力分析; 用户响应意愿; 充放电合约机制; EV短时备用能力计算方法; 充电策略; 电网备用容/电量产品; 备用容量价格; 备用市场设计。,电动汽车备用能力评估与市场机制研究

      基于Matlab的裂缝检测GUI系统:直方均衡化、滤波去噪、对比度增强、二值化及裂缝识别处理,参数显示与Excel数据保存,基于MATLAB的裂缝检测GUI系统:图像均衡化、去噪与二值化,裂缝识别与参

      基于Matlab的裂缝检测GUI系统:直方均衡化、滤波去噪、对比度增强、二值化及裂缝识别处理,参数显示与Excel数据保存,基于MATLAB的裂缝检测GUI系统:图像均衡化、去噪与二值化,裂缝识别与参数化保存至Excel报告处理软件。,基于matlab的裂缝检测系统GUI,对图像进行直方均衡化处理,中值滤波法去噪处理,亮化增强对比度,图像二值化,对二值图像进行滤波处理,裂缝识别,裂缝判断,裂缝拼接,裂缝投影,用方框将裂缝标记出来,显示裂缝参数,保存裂缝图像,保存裂缝参数数据到excel中。 ,基于Matlab的裂缝检测系统GUI; 直方均衡化处理; 中值滤波去噪; 亮化增强对比度; 图像二值化; 裂缝识别与判断; 裂缝拼接与投影; 标记与显示裂缝; 保存裂缝图像与参数; 保存至Excel。,基于Matlab的裂缝检测系统:图像处理与参数分析GUI工具

      KPCA核主成分分析方法:高效降低数据维度,提升MATLAB程序运行效率的指导服务,KPCA核主成分分析法:MATLAB程序中的高维数据降维与特征选择指导服务,KPCA核主成分分析法MATLAB, 主

      KPCA核主成分分析方法:高效降低数据维度,提升MATLAB程序运行效率的指导服务,KPCA核主成分分析法:MATLAB程序中的高维数据降维与特征选择指导服务,KPCA核主成分分析法MATLAB, 主要是降低数据维度。 当输入数据维度太大的时候,程序运行会很慢,所以适当由高维度转成低维度是有必要的。 可指定成分数或累计贡献度进行特征选择 提供指导服务 (所程序均有详细注释) ,KPCA; 降维; 程序运行速度; 成分数; 累计贡献度; 特征选择; 详细注释,KPCA降维算法在MATLAB中的实践:高效处理高维数据

      数控加工编程技术试题库及答案.doc

      数控加工编程技术试题库及答案.doc

      基于PHP的二手交易平台.zip(毕设&课设&实训&大作业&竞赛&项目)

      项目工程资源经过严格测试运行并且功能上ok,可复现复刻,拿到资料包后可实现复刻出一样的项目,本人系统开发经验充足(全栈),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助 【资源内容】:包含源码、工程文件、说明等。资源质量优质,放心下载使用!可实现复现;设计报告可借鉴此项目;该资源内项目代码都经过测试运行,功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,及时抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 质量优质,放心下载使用。下载后请首先打开说明文件(如有);项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,网络商品/电子资源资料,勿用于商业用途。质量优质,放心下载使用。

    Global site tag (gtag.js) - Google Analytics