概述
- JavaWeb三大组件:Servlet,Filter,Linstener
- Listener也称之为监听器,用于对其他对象发生事件或状态改变进行监听和处理,当被监听的对象发生改变时,立即采取相应处理
- 用于监听Web应用程序中的 ServletContext,HttpSession,ServletRequest 等域对象的创建与销毁事件,以及监听域对象中的属性发生修改的事件
分类
- 监听域对象自身的创建和销毁的事件监听器
- 监听域对象中的属性的增加和删除的事件监听器
- 监听绑定到 HttpSession 域中的某个对象的状态的事件监听器
域对象 | 创建时机 | 销毁时机 |
---|---|---|
ServletContext | Web服务器启动时 | Web服务器关闭时 |
HttpSession | 浏览器开始于服务器会话时 | 调用HttpSession.invalidate()或超过最大有效时间间隔时 |
ServletRequest | 请求开始时 | 访问结束后 |
监听器编写
- Servlet规范为每种事件监听器都定义了相应的接口,开发人员编写事件监听器程序只需实现这些接口,Web服务器根据接口注册相应的监听对象上
- 监听器在web.xml中注册,可注册多个Servlet事件监听器,服务器按照它们在web.xml文件中的注册顺序来加载和注册Servlet事件监听器
- Web容器调用与之相关的事件监听器的相关方法,开发人员在这些方法中编写事件处理代码即被执行
- 一个Web应用程序只会为每个事件监听器创建一个对象,因此存在多线程安全问题
- web.xml中标签
- <listener>:注册listener
- <listener-class>:listener地址
- <listener>:注册listener
生命周期监听器
ServletContextListener接口(常用)
- 监听ServletContext对象的创建和销毁事件
- public void contextInitialized(ServletContextEvent sce)
- ServletContext对象的创建时被触发
- public void contextDestroyed(ServletContextEvent sce)
- ServletContext对象的销毁时被触发
HttpSessionListener接口(常用)
- 监听HttpSession对象的创建和销毁事件
- public void sessionCreated(HttpSessionEvent se)
- Session对象的创建时被触发
- public void sessionDestroyed(HttpSessionEvent se)
- Session对象的销毁时被触发
ServletRequestListener接口
- 监听ServletRequest对象的创建和销毁事件
- public void requestInitialized(ServletRequestEvent sre)
- ServletRequest对象的创建时被触发
- public void requestDestroyed(ServletRequestEvent sre)
- ServletRequest对象的销毁时被触发
属性操作监听器
ServletContextAttributeListener接口
- public void attributeAdded(ServletContextAttributeEvent event)
- 向appliction中添加属性时调用
- public void attributeRemoved(ServletContextAttributeEvent event)
- 从appliction中删除属性时调用
- public void attributeReplaced(ServletContextAttributeEvent event)
- 替换application中的属性时调用
HttpSessionAttributeListener接口(常用)
- public void attributeAdded(HttpSessionBindingEvent event)
- 向session中添加属性时调用
- public void attributeRemoved(HttpSessionBindingEvent event)
- 从session中删除属性时调用
- public void attributeReplaced(HttpSessionBindingEvent event)
- 替换session中的属性时调用
ServletRequestAttributeListener接口
- public void attributeAdded(ServletRequestAttributeEvent event)
- 向request中添加属性时调用
- public void attributeRemoved(ServletRequestAttributeEvent event)
- 从request中删除属性时调
- public void attributeReplaced(ServletRequestAttributeEvent event)
- 替换request中的属性时调用
感知型监听器(与HttpSession相关的指定类属性变化)
HttpSessionBindingListener接口
- public void valueBound(HttpSessionBindingEvent event)
- 当该类实例设置进session域中时调用
- public void valueUnbound(HttpSessionBindingEvent event)
- 当该类的实例从session域中移除时调用
HttpSessionActivationListener接口
- public void sessionWillPassivate(HttpSessionEvent se)
- 当对象session被序列化(钝化)后调用
- public void sessionDidActivate(HttpSessionEvent se)
- 当对象session被反序列化(活化)后调用