监听器也是Servlet三大组件之一。监听器可以监听一些对象或对象属性状态的变化。
Web事件:
- 事件源:Web对象,例如:HttpSession对象、ServletRequest对象、ServletContext对象。
- 事件类型:ServletContextEvent、ServletRequestEvent、HttpSessionEvent、ServletContextAttributeEvent、ServletRequestAttributeEvent、HttpSessionAttributeEvent。
- 事件监听器:ServletContextListener、ServletRequestListener、HttpSessionListener、ServletContextAttributeListener、ServletRequestAttributeListener、HttpSessionAttributeListener。
- 处理函数:监听器中的一些处理方法。
监听对象状态的监听器
ServletContextListener:监听Servlet对象状态的监听器。
HttpSessionListener:监听Session对象状态的监听器。
ServletRequestListener:监听Request对象状态的监听器。
下面以ServletContextListener为例介绍:
ServletContextListener用于监听ServletContext对象状态的变化。例如:创建ServletContext,销毁ServletContext。当项目启动的时候,容器会创建ServletContext对象,如果配置了ServletContextListener监听器,那么就可以在项目启动的时候加入一些处理。
- 使用监听器的步骤:
第一步:定义一个类,实现监听器接口,并实现监听器的所有方法;
public class ContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext被创建...");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("ServletContext被销毁...");
}
}
第二步:在web.xml中配置监听器;
<listener>
<listener-class>com.tung.listener.ContextListener</listener-class>
</listener>
监听对象属性状态的监听器
ServletContextAttributeListener:监听Servlet对象属性状态的监听器。
HttpSessionAttributeListener:监听Session对象属性状态的监听器。
ServletRequestAttributeListener:监听Request对象属性状态的监听器。
下面以HttpSessionAttributeListener为例介绍:
HttpSessionAttributeListener用于监听Sessiont对象属性状态的变化。例如:添加属性、删除属性、修改属性。
public class SessionAtrributeListener implements HttpSessionAttributeListener {
// 往Session对象中添加属性的时候自动调用
@Override
public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("添加属性");
System.out.println("属性名:"+httpSessionBindingEvent.getName());
System.out.println("属性值:"+httpSessionBindingEvent.getValue());
}
// 往Session对象中删除属性的时候自动调用
@Override
public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("删除属性");
System.out.println("属性名:"+httpSessionBindingEvent.getName());
System.out.println("属性值:"+httpSessionBindingEvent.getValue());
}
// 往Session对象中修改属性的时候自动调用
@Override
public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
System.out.println("修改属性");
System.out.println("属性名:"+httpSessionBindingEvent.getName());
System.out.println("属性值:"+httpSessionBindingEvent.getValue());
}
}
配置属性监听器
在web.xml配置属性监听器
<listener>
<listener-class>com.tung.listener.SessionAtrributeListener</listener-class>
</listener>
零配置(注解)
@WebListener配置监听器。
@WebListener
public class SessionAtrributeListener implements HttpSessionAttributeListener {
}