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初始化 | javax.servlet.ServletRequestListener | requestInitialized() |
request销毁 | javax.servlet.ServletRequestListener | requestDestroyed() |
增加属性 | javax.servlet.ServletRequestAttributeListener | attributeAdded() |
删除属性 | javax.servlet.ServletRequestAttributeListener | attributeRemoved() |
属性被替换 | javax.servlet.ServletRequestAttributeListener | attributeReplaced() |
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容器将会调用此方法 |