博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaWeb监听器
阅读量:6881 次
发布时间:2019-06-27

本文共 5488 字,大约阅读时间需要 18 分钟。

hot3.png

JavaWeb监听器

监听器的作用

监听你的web应用,监听许多信息的初始化,销毁,增加,修改,删除值等。当被监听对象发生上述事件后,监听器某个方法将立即被执行。

常用的有:1、统计在线人数和在线用户。2、系统加载时进行信息的初始化工作。3、统计网站的访问量。4、跟Spring结合。

监听器的类型

按监听的对象划分,servlet2.4规范定义的有三种

1.用于监听应用程序环境对象(ServletContext)的事件监听器。

2.用于监听用户会话对象(HttpSession)的事件监听器。

3.用于监听请求消息对象(ServletRequest)的事件监听器。

 

按监听的事件划分

1.用于监听域对象自身的创建和销毁。

2.用于监听域对象中的属性的增加和删除。

3.用于监听绑定到HttpSession域中的某个对象的状态。

 

详细介绍

1. Servlet上下文进行监听(Application级): 

用于监听 ServletContext对象的创建和删除以及属性的添加、删除和修改等操作,该监听器需要用到如下两个接口类: 

ServletContextAttributeListener:监听对 ServletContext 属性的操作,比如增加、删除、修改。

ServletContextListener:监听对 ServletContext  对象的创建和删除。

2、监听HTTP会话(Session级)

用于监听 HTTP 会话活动情况和 HTTP 会话中的属性设置情况,也可以监听 HTTP 会话的 active 和 passivate 情况等,该监听器需要用到如下多个接口类: 

1) HttpSessionListener:监听 HttpSession 的操作 

      sessionCreate(HttpSessionEvent se)         初始化时调用; 

      sessionDestroyed(httpSessionEvent se)    销毁时调用,即当用户注销时调用 

2) HttpSessionActivationListener:用于监听 HTTP 会话的 active 和 passivate 情况 

3) HttpSessionAttributeListener:监听 HttpSession 中的属性操作 

      attributeAdded(HttpSessionBindingEvent se)         添加属性时调用 

      attributeRemoved(HttpSessionBindingEvent se)    删除属性时调用 

      attributeReplaced(HttpSessionBindingEvent se)    修改属性时调用 

3. 对客户端请求进行监听(Request级): 

用于对客户端的请求进行监听是在 Servlet2.4 规范中新添加的一项新技术,需要实现如下接口ServletRequestListener。

针对监听器类型分类进行代码演示

演示对客户端请求进行监听

package com.springapp.mvc.Listener;import javax.servlet.ServletRequestEvent;import javax.servlet.ServletRequestListener;/** * 对客户端请求进行监听(Request级) * * 监听ServletRequest对象的创建和销毁,需要实现ServletRequestListener接口。 * * * @author Leizhi 2016/5/25 * @see * @since 1.0 */public class ServletRequestListenerDemo implements ServletRequestListener {	@Override	public void requestDestroyed(ServletRequestEvent servletRequestEvent) {		System.out.println("----------监听到ServletRequest对象的创建---------");	}	@Override	public void requestInitialized(ServletRequestEvent servletRequestEvent) {		System.out.println("----------监听到ServletRequest对象的销毁---------");	}}
演示监听HTTP会话(Session级),实现在线人数监听
package com.springapp.mvc.Listener;import javax.servlet.ServletContext;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;/** * 监听HTTP会话(Session级) * * 作用:1、监听 HTTP会话活动情况,即创建、销毁。须实现HttpSessionListener接口。 * 2、监听HTTP 会话中的属性设置情况。须实现HttpSessionAttributeListener接口。 * 3、监听 HTTP 会话的 active 和 passivate 情况。须实现HttpSessionActivationListener接口。 * 此处由于篇幅限制仅演示监听HTTP会话活动情况。 * * 通过监听http会话实现在限人数统计 * * @author Leizhi 2016/5/25 * @see * @since 1.0 */public class HttpSessionListenerDemo implements HttpSessionListener {	@Override	public void sessionCreated(HttpSessionEvent httpSessionEvent) {		System.out.println("-----------------监听到session创建-----------------");		ServletContext context = httpSessionEvent.getSession().getServletContext();		Integer count = (Integer) context.getAttribute("count");		if (null == count)		{			count = 1;		}		else		{			count += 1;		}		context.setAttribute("count", count);//保存人数	}	@Override	public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {		System.out.println("-----------------监听到session销毁-----------------");		ServletContext context = httpSessionEvent.getSession().getServletContext();		Integer count = (Integer) context.getAttribute("count");		count = count-1;		context.setAttribute("count", count);//保存人数	}}

演示对Servlet上下文进行监听(Application级)

package com.springapp.mvc.Listener;import javax.servlet.ServletContextAttributeEvent;import javax.servlet.ServletContextAttributeListener;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;/** * Servlet上下文进行监听(Application级) * * 监听 ServletContext对象的创建和删除,需要实现ServletContextListener。 * 监听ServletContext属性的添加、删除和修改等操作,需要实现ServletContextAttributeListener。 * * @author Leizhi 2016/5/25 * @see * @since 1.0 */public class ServletContextListenerDemo implements ServletContextListener, ServletContextAttributeListener {	@Override	public void attributeAdded(ServletContextAttributeEvent servletContextAttributeEvent) {		System.out.println("------------监听到application范围内属性的添加--------------");		System.out.println("application范围内添加了名为"+servletContextAttributeEvent.getName()+",值为"+servletContextAttributeEvent.getValue()+"的属性");	}	@Override	public void attributeRemoved(ServletContextAttributeEvent servletContextAttributeEvent) {		System.out.println("------------监听到application范围内属性的删除--------------");		System.out.println("application范围内删除了名为"+servletContextAttributeEvent.getName()+",值为"+servletContextAttributeEvent.getValue()+"的属性");	}	@Override	public void attributeReplaced(ServletContextAttributeEvent servletContextAttributeEvent) {		System.out.println("------------监听到application范围内属性的替换--------------");		System.out.println("application范围内替换了名为"+servletContextAttributeEvent.getName()+",值为"+servletContextAttributeEvent.getValue()+"的属性");	}	@Override	public void contextInitialized(ServletContextEvent servletContextEvent) {		System.out.println("--------------监听到容器初始化----------------");	}	@Override	public void contextDestroyed(ServletContextEvent servletContextEvent) {		System.out.println("--------------监听到容器初销毁----------------");	}}

最后在web.xml中对监听器进行配置

Session监听器
com.springapp.mvc.Listener.HttpSessionListenerDemo
上下文监听器
com.springapp.mvc.Listener.ServletContextListenerDemo
会话监听器
com.springapp.mvc.Listener.ServletRequestListenerDemo

运行截图

启动Tomcat时

 

 

https://my.oschina.net/u/2494581/blog/681015

转载于:https://my.oschina.net/xiaominmin/blog/1598611

你可能感兴趣的文章
jsp内置对象【05】session对象详解
查看>>
Collection源码分析(四):LinkedHashMap源码分析
查看>>
DNS的服务器的编译安装,及缓存名称服务器配置
查看>>
前端工程师不得不知道的ES6新特性(三)
查看>>
Java核心API -- 14(Socket)
查看>>
JJavaScript框架——什么是react
查看>>
linux 重启apache:apachectl -k graceful
查看>>
让Docker容器使用静态独立的外部IP(便于集群组建)
查看>>
由某产品线组织架构调整引发的思考
查看>>
1.WebSocket编程—Hello World
查看>>
html学习笔记的支线任务,怎样编写CSS
查看>>
Hbase写入hdfs源码分析
查看>>
sencha cmd metadata
查看>>
【iOS-cocos2d-X 游戏开发之九】Cocos2dx利用CCSAXParser解析xml数据
查看>>
MySQL 性能优化
查看>>
Aspose.Total 套包组件介绍
查看>>
做好四点让网站内容更受青睐
查看>>
财源滚滚的第三方支付牌照
查看>>
NAT
查看>>
Linux基金会Hyperledger项目再添新成员:LG
查看>>