11.Listener
一、简介
- Listener翻译过来叫监听器,主要监听ServletRequest、HttpSession、ServletContext对象的生命周期以及域对象中属性的变化
- 监听器一共分为三大类八种(八个接口)
- 1)生命周期监听器(3个)
- 2)属性变化监听器(3个)
- 3)session域中的属性变化监听器(2个)
- 通过1)和2)创建的监听器需要在web.xml中进行注册,但是通过3)创建的监听器不需在web.xml中进行注册,只需要被JavaBean类实现即可
二、生命周期监听器
-
1)ServletRequest的生命周期监听器
- ServletRequestListener
public interface ServletRequestListener extends EventListener { void requestDestroyed(ServletRequestEvent var1); void requestInitialized(ServletRequestEvent var1); }
-
2)HttpSession的生命周期监听器
- HttpSessionListener
public interface HttpSessionListener extends EventListener { void sessionCreated(HttpSessionEvent var1); void sessionDestroyed(HttpSessionEvent var1); }
-
3)ServletContext的生命周期监听器
- ServletContextListener
public interface ServletContextListener extends EventListener { void contextInitialized(ServletContextEvent var1); void contextDestroyed(ServletContextEvent var1); }
-
创建ServletContext的生命周期监听器的步骤:
- 1)创建一个类实现ServletContextListener接口
package com.atguigu.listener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class MyServletContextListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent servletContextEvent) { System.out.println("MyServletContextListener对象已经被创建"); } @Override public void contextDestroyed(ServletContextEvent servletContextEvent) { System.out.println("MyServletContextListener对象已经被销毁"); } }
- 2)在web.xml中注册ServletContextListener接口的实现类
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <!--注册监听器--> <listener> <listener-class>com.atguigu.listener.MyServletContextListener</listener-class> </listener> </web-app>
- 3)启动Tomcat就会自动调用初始化的方法
- 4)关闭Tomcat就会自动调用销毁的方法
三、属性变化监听器
-
属性变化分为属性的添加、属性的移除、属性的替换
-
1)ServletRequest的属性变化监听器
- ServletRequestAttributeListener
public interface ServletRequestAttributeListener extends EventListener { void attributeAdded(ServletRequestAttributeEvent var1); void attributeRemoved(ServletRequestAttributeEvent var1); void attributeReplaced(ServletRequestAttributeEvent var1); }
-
2)HttpSession的属性变化监听器
- HttpSessionAttributeListener
public interface HttpSessionAttributeListener extends EventListener { void attributeAdded(HttpSessionBindingEvent var1); void attributeRemoved(HttpSessionBindingEvent var1); void attributeReplaced(HttpSessionBindingEvent var1); }
-
3)ServletContext的属性变化监听器
- ServletContextAttributeListener
public interface ServletContextAttributeListener extends EventListener { void attributeAdded(ServletContextAttributeEvent var1); void attributeRemoved(ServletContextAttributeEvent var1); void attributeReplaced(ServletContextAttributeEvent var1); }
四、session域中的属性变化监听器
-
通过以下两个接口创建的监听器不需要在web.xml文件中注册,只需要让JavaBean类实现这两个接口即可
-
1)HttpSessionBindingListener
- 用来监听JavaBean对象在session域中的添加和移除
public interface HttpSessionBindingListener extends EventListener { void valueBound(HttpSessionBindingEvent var1); void valueUnbound(HttpSessionBindingEvent var1); }
-
2)HttpSessionActivationListener
- 用来监听JavaBean对象的钝化和活化
public interface HttpSessionActivationListener extends EventListener { void sessionWillPassivate(HttpSessionEvent var1); void sessionDidActivate(HttpSessionEvent var1); }
-
例如:
- 创建一个监听User对象的钝化和活化的监听器
public class User implements HttpSessionActivationListener, Serializable { //钝化时调用的方法 @Override public void sessionWillPassivate(HttpSessionEvent httpSessionEvent) { System.out.println("User对象被钝化了"); } //活化时调用的方法 @Override public void sessionDidActivate(HttpSessionEvent httpSessionEvent) { System.out.println("User对象又活化了"); } }