Servlet监听器 Listener

来源:互联网 发布:战地4网络不好会掉帧吗 编辑:程序博客网 时间:2024/05/21 09:33

1,Listener是Servlet规范的高级特性。Listener应用于监听Java Web程序中的事件,例如创建,修改,删除 Session,request,context等,并用于触发相应的事件。利用Listener能够用很少的代码实现很绚丽的效果。


2,目前Servlet 2.5规范中有8种Listener,分别对应不同事件的监听。

以下3种监听用于监听session,context,request的创建与销毁。

  • HttpSessionListener :监听Session的创建与销毁,创建Session时执行sessionCreated(HttpSessionEvent se) 方法,超时或者执行session.invalidate()时执行     sessionDestroyed(HttpSessionEvent se)方法。该Listeren可用于收集在线者的信息等。
  • ServletContextListener:监听context的创建与销毁。context代表当前的web应用程序。服务器启动或者热部署war包时执行contextInitialized(ServletContextEvent event)方法。服务器关闭时或只关闭该web时会执行contextDestroyed(ServletContextEvent event)方法。该Listener可用于启动时获取web.xml里配置的初始化参数。
  • ServletRequestListener:监听request的创建与销毁。用户每次请求request都会执行requestInitialized(ServletRequestListener event)方法。request处理完毕自动销毁前执行requestDestoryed(ServletRequestListener event)方法。注意的是,如果一个HTML页面内含有多个图片,则请求一次HTML页面可能会触发多次request事件。

以下3种监听用于监听session,context,request的属性变化,接口名称为xxxAttributeListener。

  • 包括 HttpSessionAttributeListener,ServletContextAttributeListener,ServletRequestAttributeListener。当向被监听对象中添加,更新,移除属性时,会分别执行xxAdded(),xxReplaced(),xxRemoved()方法。xx分别代表Session,context,request

以下2种监听用于监听session内的对象,分别是HttpSessionBindingListener与HttpSessionActivationListener。触发机制如下

  • HttpSessionBindingListener:当对象被放入session里时执行valueBound(HttpSessionBindingEvent event)方法。当对象被从session里移除时执行valueUnbound(HttpSessionBindingEvent event)方法。对象必须实现该Listener。
  • HttpSessionActivationListener:服务器关闭时,会将Session里的内容进行保存到硬盘上这个过程叫钝化。服务器重新启动时,会将session内容从硬盘上重新加载。当session里的对象被钝化时会执行sessionWillPassivate(HttpSessionEvent se)方法,当对象被重新加载时会执行sessionDidActivate(HttpSessionEvent se)对象必须实现该Listener接口

ps : !!!注意 由于监听session内对象不同于以上6种监听,所以不需要在web.xml中进行配置。


3,使用Listener需要在web.xml中进行配置。

  <listener>  <listener-class>com.demo.biz.Test</listener-class>  </listener>
并且需要在Test.java类中集成Listener接口,下面的例子仅仅是在项目启动时输出“启动时进行监听!”

import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;public class Test implements ServletContextListener{/* (non-Javadoc) * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent) */@Overridepublic void contextDestroyed(ServletContextEvent arg0) {// TODO Auto-generated method stub}/* (non-Javadoc) * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent) */@Overridepublic void contextInitialized(ServletContextEvent arg0) {// TODO Auto-generated method stubSystem.out.println("启动时进行监听!-------------------------------------------------------------------------------------------");}}

注意:一个完整的Listener包括Listener类,<listener>配置,在一个web.xml中可以配置多个Listener,同一种类型的Listener也可以配置多个,触发的时候服务器会顺序执行各个Listener的相应方法。


原创粉丝点击