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属性的增加、删除和替换时,事件监听类得到通知。?
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容器将会调用此方法