java servlet监听器种类及介绍

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

ServletContextListener监听ServletContext。
当创建ServletContext时,激发 contextInitialized(ServletContextEvent sce)方法;
当销毁ServletContext时,激发contextDestroyed(ServletContextEvent sce)方法。

ServletContextListener 接口

contextInitialized 初始化方法

contextDestroyed 销毁方法

ServletRequestListener, ServletRequestAttributeListener 接口

Servlet 2.4版在事件监听器中加入了ServletRequest监听器,包括:ServletRequestListener, ServletRequestAttributeListener ,用来管理和控制与ServletRequest动作有关的事件。

对于ServletRequest事件,当request初始化、销毁或者request属性的增加、删除和替换时,事件监听类得到通知。
下表列出了 ServletRequest的事件类型,对应特定事件的监听类必须实现的接口和当事件发生时调用的方法。
事件类型接口方法
request初始化javax.servlet.ServletRequestListenerrequestInitialized()
request销毁javax.servlet.ServletRequestListenerrequestDestroyed()
增加属性javax.servlet.ServletRequestAttributeListenerattributeAdded()
删除属性javax.servlet.ServletRequestAttributeListenerattributeRemoved()
属性被替换javax.servlet.ServletRequestAttributeListenerattributeReplaced()

HttpSessionListener 接口

Http会话(Seesion)与请求(Request)与ServletContext用法相当。需指出,Request监听器在Tomcat 4.1不能调试,故升级到Tomcat 5.0才可以,所以可以肯定RequestListener是符合Servlet2.4新规范的,需用tomcat5.0以上版本。

利用HttpSessionListener接口可针对HTTP会话建立一个“监听器类”。只要Web应用程序内新增了一个HTTP会话,Servlet 容器就会将该事件(HttpSessionEvent)转交给适当的“监听器类”进行处理(必须事先配置web.xml)。

下表是HttpSessionListener接口内定义的两个方法,只要是实现该接口的“监听器类”,就必须包含这两种方法。

方法名称调用时机
sessionCreated(HttpSessionEvent se)在Web应用程序内建立一个新的HTTP会话时, Servlet容器将会调用此方法
sessionDestoryed(HttpSessionEvent se)在Web应用程序内移除某个HTTP会话时,Servlet容器将会调用此 方法

  HttpSessionActivationListener 接口

当Web应用程序的会话必须跨越其他服务器时,实现HttpSessionActivationListener接口的“监听器类”将会收到会话转移的事 件。
下表是HttpSessionActivationListener接口内定义的两种方法。

方法名称调用时机
sessionWillPassivate(HttpSessionEvent se)当HTTP会话必须转移到其他服务器之前,Servlet容器将会调用此方法
sessionDidActivate(HttpSessionEvent se)当HTTP会话转移到其他服务器以后,Servlet容器将会调用此方法

举例来说,会话S必须从服务器A转移到服务器B,此时Servlet容器会在S转移前产生一个会话“被动(passive)”事件,该事件由 HttpSessionActivationListener接口的sessionWillPassivate()方法予以回应。当S转移到服务器B以 后,Servlet容器会再产生一个会话“启动”(activate)事件,该事件由HttpSessionActivationListener接口的 sessionDidActivate()方法予以回应。

HttpSessionAttributeListener 接口

HttpSessionAttributeListener接口与ServletContextAttributeListener非常类似,前者是针对 HTTP会话所设计的“监听器接口”,后者则是针对Servlet运行环境(context)所设计的“监听器接口”,该接口定义的方法见下表。

方法名称调用时机
attributeAdded(HttpSessionBindingEvent scab)在HttpSession对象内加入新的属性时会调用此方法
attributeRemoved(ServletContextAttributeEvent scab)在HttpSession对象内删除某个属性时会调用此方法
attributeReplaced(ServletContextAttributeEvent scab)在HttpSession对象内置换某个属性时会调用此方法

当HTTP会话(HttpSession对象)内新增、置换或删除某个属性时将会产生一个事件(HttpSessionBindingEvent),只要 是实现HttpSessionAttributeListener接口的“监听器类”就可以回应该事件。当然了,你必须将这个“监听器类”定义在 web.xml文件内。

HttpSessionBindingListener 接口

HttpSessionBindingListener接口在观念上与HttpSessionAttributeListener接口有点类似,但是它与 本章探讨的“监听器类”并没有直接关系。
因为Servlet 2.3规范以前尚未制定Web应用程序的“监听器”机制,如果想知道HTTP会话内何时加入或移除某个对象,必须采用下列方式:

(1)准备绑定至HTTP会话的对象必须实现 HttpSessionBindingListener接口- - 监听器对象。

(2)在该对象内改写HttpSessionBindingListener接口 所定义的两种方法(参考下表)。

方法名称

调用时 机

valueBound(HttpSessionBindingEvent event)当监听器对象绑定至HTTP会话时,Servlet容器将会调用此方法
valueUnbound(HttpSessionBindingEvent event)当监听器对象从HTTP会话内修改、移除或会话销毁时,Servlet容器将会调用此方法

发表评论