一、监听器简介
1、定义
Servlet规范中定义的一种特殊的组件,用来监听Servlet容器产生的事件并进行相应的处理。
2、监听器术语
- 事件源:被监听的对象;
- 监听器:监听事件源对象;
- 注册监听器:监听器和事件源绑定
- 事件:事件源行为触发的监听行为。
二、Listener API详解
1、监听域对象创建与销毁
ServletRequestListener::监听ServletRequest对象的创建和销毁
void requestInitialized(ServletRequestEvent sre):接收ServletRequest即将超出web应用程序范围的通知。
void requestDestroyed(ServletRequestEvent sre):接收ServletRequest即将进入web应用程序范围的通知。
HttpSessionListener:监听HttpSession对象的创建和销毁
void sessionCreated(HttpSessionEvent se):接收会话已创建的通知。
void sessionDestroyed(HttpSessionEvent se):接收会话即将失效的通知。
ServletContextListener:监听web上下文的初始化与销毁
void contextInitialized(ServletContextEvent sce):接收web应用程序初始化进程正在启动的通知。
void contextDestroyed(ServletContextEvent sce):接收ServletContext即将关闭的通知。
2、监听域对象属性变更(添加、替换、删除)
ServletRequestAriibuteListenr:监听ServletRequest对象属性的增加、删除和属性的变化
void attributeAdded(ServletRequestAttributeEvent srae):接收属性已添加到ServletRequest的通知。
void attributeRemoved(ServletRequestAttributeEvent srae):接收已从ServletRequest中移除属性的通知。
void attributeReplaced(ServletRequestAttributeEvent srae):接收ServletRequest上已替换属性的通知。
HttpSessionAttributeListener:监听HttpSession属性的增加、删除和属性的变化
void attributeAdded(HttpSessionBindingEvent event):接收属性已添加到会话的通知。
void attributeRemoved(HttpSessionBindingEvent event):接收已从会话中删除属性的通知。
void attributeReplaced(HttpSessionBindingEvent event):接收会话中已替换属性的通知。
ServletContextAttibuteListener:监听ServletContext对象的属性增加、删除和属性的变化
void attributeAdded(ServletContextAttributeEvent event):接收属性已添加到ServletContext的通知。
void attributeRemoved(ServletContextAttributeEvent event):接收属性已从ServletContext中移除的通知。
void attributeReplaced(ServletContextAttributeEvent event):接收属性已从ServletContext中修改的通知。
3、监听Session作用域特殊Javabea
绑定状态:就一个对象被放到session域中;
解绑状态:就是这个对象从session域中移除了;
钝化状态:是将session内存中的对象持久化(序列化)到磁盘;
活化状态:就是将磁盘上的对象再次恢复到session内存中。
3.1、HttpSessionBindingListener:监听session绑定与解绑javaBean
void valueBound(HttpSessionBindingEvent event):通知对象它正被绑定到会话并标识该会话。
void valueUnbound(HttpSessionBindingEvent event):通知对象它正在从会话解除绑定并标识会话。
3.2、HttpSessionActivationListener:监听javaBean对象的活化与钝化。
void sessionDidActivate(HttpSessionEvent se):通知会话被活化。
void sessionWillPassivate(HttpSessionEvent se):会话即将被钝化的通知。
四、Listener的使用
1、Listener的快速入门
1.1、编写一个类,实现监听器接口;
package com.wedu.demo.servlet;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* 监听器快速入门
*/
public class ListenerDemo implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("应用程序开始初始化……");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("销毁ServletContext对象……");
}
}
1.2、配置监听器
web.xml方式配置
<!--配置监听器-->
<listener>
<listener-class>com.wedu.demo.ListenerDemo</listener-class>
</listener>
注解方式配置
2、Listener开发的注意项
多个Listener的执行顺序:同一个应用里面多个监听器,按在web.xml的注册顺序,依次执行。
五、Listener的应用
1、统计当前在线用户数量
2、自定义session扫描器