简介
监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行
监听器的术语
- 事件源: 被监听对象。(目标对象)
- 监听器对象: 用于监听“事件源”的对象
- 注册(绑定): 将“监听器对象”注册给“事件源”。当“事件源”发生某些行为时,监听对象将被执行
- 事件: 事件源行为的称呼。
- 事件对象: 在“监听器对象”中获得“事件源”
WEB中的监听器的分类&触发时机
监听三个域对象的创建和销毁的监听器
ServletContextListener: 监听 context的创建与销毁。context代表当前的web应用程序。服务器启动或者热部署war包时执行contextInitialized(ServletContextEvent event)方法。服务器关闭时或者只关闭web时执行contextDestroyed(ServletContextEvent event)方法。该Listener可用于启动时获取web.xml里配置的初始化参数
HttpSessionListener: 监听session的创建与销毁。创建session时执行sessionCreated(HttpSessionEven se)方法。超时或者执行session.invalidate()时执行sessionDestroyed(HttpSessionEven se)方法。该Listener可用于收集在线者信息。
**ServletRequestListener:**监听request的创建与销毁。每次请求request都会执行requestIntInitialized(ServletRequestEvent event)方法。request处理完毕自动销毁前执行requestDestroyed(ServletRequestEvent event)方法。如果一个HTML页面内含有多个照片,则请求一次HTML页面可能会触发多次request事件。
监听三个域对象的属性变更的监听器(属性添加,移除,替换)
ServletContextAttributeListener
HttpSessionAttributeListener
ServletRequestAttributeListener
监听HttpSession中的JavaBean的状态改变(绑定,解除绑定,钝化,活化)
HttpSessionBindingListener: 当前对象被放到session里执行valueBound(HttpSessionBindingEven event)方法。当对象从session里移除时执行valueUnbound(HttpSessionBindingEven event)方法。对象必需实现Listener接口。
HttpSessionActivationListener: 服务器关闭时,会将session里的内容保存到硬盘上,这个过程叫钝化。服务器重新启动时,会将session内容从硬盘上重新加载。当session里的对象被钝化时执行sessionWillPassivate(HttpSessionEvent se)方法,当对象重新加载时执行sessionDidActivate(HttpSessionEvent se)。对象必需实现Listener接口