Listener

1.Listener 监听器

1、Listener 监听器它是 JavaWeb 的三大组件之一。JavaWeb 的三大组件分别是:Servlet 程序Filter 过滤器Listener 监听器

2、Listener 它是 JavaEE 的规范,就是接口

3、监听器的作用是,监听某种事物的变化。然后通过回调函数,反馈给客户(程序)去做一些相应的处理。


监听器:专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动。 Servlet监听器:Servlet规范中定义的一种特殊类,它用于监听Web应用程序中的ServletContextHttpSessionHttpServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件。

  1. ServletContextListener - 监听ServletContext对象的创建和销毁的过程

  2. HttpSessionListener - 监听HttpSession对象的创建和销毁的过程

  3. ServletRequestListener - 监听ServletRequest对象的创建和销毁的过程

  4. ServletContextAttributeListener - 监听ServletContext的保存作用域的改动(add,remove,replace)

  5. HttpSessionAttributeListener - 监听HttpSession的保存作用域的改动(add,remove,replace)

  6. ServletRequestAttributeListener - 监听ServletRequest的保存作用域的改动(add,remove,replace)

  7. HttpSessionBindingListener - 监听某个对象在Session域中的创建与移除

  8. HttpSessionActivationListener - 监听某个对象在Session域中的序列化和反序列化

1.1 监听器分类

  • 监听域对象本身

    • ServletContext
    • HttpSession
    • HttpServletRequest
  • 监听域对象的属性域

    • 应用域
    • 会话域
    • 请求域
  • 监听存入Session域的对象本身

    • 对象是否存入会话域

    • 对象是否和Session一起被钝化到了硬盘上

      2022-09-22_230121

  • 域对象监听器

  • 域对象的属性域监听器

  • Session域中数据的监听器

1.2 监听器列表

①ServletContextListener

作用:监听ServletContext对象的创建与销毁

方法名作用
contextInitialized(ServletContextEvent sce)ServletContext创建时调用
contextDestroyed(ServletContextEvent sce)ServletContext销毁时调用

ServletContextEvent对象代表从ServletContext对象身上捕获到的事件,通过这个事件对象我们可以获取到ServletContext对象。

②HttpSessionListener

作用:监听HttpSession对象的创建与销毁

方法名作用
sessionCreated(HttpSessionEvent hse)HttpSession对象创建时调用
sessionDestroyed(HttpSessionEvent hse)HttpSession对象销毁时调用

HttpSessionEvent对象代表从HttpSession对象身上捕获到的事件,通过这个事件对象我们可以获取到触发事件的HttpSession对象。

③ServletRequestListener

作用:监听ServletRequest对象的创建与销毁

方法名作用
requestInitialized(ServletRequestEvent sre)ServletRequest对象创建时调用
requestDestroyed(ServletRequestEvent sre)ServletRequest对象销毁时调用

ServletRequestEvent对象代表从HttpServletRequest对象身上捕获到的事件,通过这个事件对象我们可以获取到触发事件的HttpServletRequest对象。另外还有一个方法可以获取到当前Web应用的ServletContext对象。

④ServletContextAttributeListener

作用:监听ServletContext中属性的创建、修改和销毁

方法名作用
attributeAdded(ServletContextAttributeEvent scab)向ServletContext中添加属性时调用
attributeRemoved(ServletContextAttributeEvent scab)从ServletContext中移除属性时调用
attributeReplaced(ServletContextAttributeEvent scab)当ServletContext中的属性被修改时调用

ServletContextAttributeEvent对象代表属性变化事件,它包含的方法如下:

方法名作用
getName()获取修改或添加的属性名
getValue()获取被修改或添加的属性值
getServletContext()获取ServletContext对象

⑤HttpSessionAttributeListener

作用:监听HttpSession中属性的创建、修改和销毁

方法名作用
attributeAdded(HttpSessionBindingEvent se)向HttpSession中添加属性时调用
attributeRemoved(HttpSessionBindingEvent se)从HttpSession中移除属性时调用
attributeReplaced(HttpSessionBindingEvent se)当HttpSession中的属性被修改时调用

HttpSessionBindingEvent对象代表属性变化事件,它包含的方法如下:

方法名作用
getName()获取修改或添加的属性名
getValue()获取被修改或添加的属性值
getSession()获取触发事件的HttpSession对象

⑥ServletRequestAttributeListener

作用:监听ServletRequest中属性的创建、修改和销毁

方法名作用
attributeAdded(ServletRequestAttributeEvent srae)向ServletRequest中添加属性时调用
attributeRemoved(ServletRequestAttributeEvent srae)从ServletRequest中移除属性时调用
attributeReplaced(ServletRequestAttributeEvent srae)当ServletRequest中的属性被修改时调用

ServletRequestAttributeEvent对象代表属性变化事件,它包含的方法如下:

方法名作用
getName()获取修改或添加的属性名
getValue()获取被修改或添加的属性值
getServletRequest ()获取触发事件的ServletRequest对象

⑦HttpSessionBindingListener

作用:监听某个对象在Session域中的创建与移除

方法名作用
valueBound(HttpSessionBindingEvent event)该类的实例被放到Session域中时调用
valueUnbound(HttpSessionBindingEvent event)该类的实例从Session中移除时调用

HttpSessionBindingEvent对象代表属性变化事件,它包含的方法如下:

方法名作用
getName()获取当前事件涉及的属性名
getValue()获取当前事件涉及的属性值
getSession()获取触发事件的HttpSession对象

⑧HttpSessionActivationListener

作用:监听某个对象在Session中的序列化与反序列化。

方法名作用
sessionWillPassivate(HttpSessionEvent se)该类实例和Session一起钝化到硬盘时调用
sessionDidActivate(HttpSessionEvent se)该类实例和Session一起活化到内存时调用

HttpSessionEvent对象代表事件对象,通过getSession()方法获取事件涉及的HttpSession对象。

1.3 ServletContextListener 监听器

ServletContextListener 它可以监听 ServletContext 对象的创建和销毁。ServletContext 对象在 web 工程启动的时候创建,在 web 工程停止的时候销毁。 监听到创建和销毁之后都会分别调用 ServletContextListener 监听器的方法反馈。

两个方法分别是:

public interface ServletContextListener extends EventListener { 
    /*** 在 ServletContext 对象创建之后马上调用,做初始化 */ 
    public void contextInitialized(ServletContextEvent sce); 
    /*** 在 ServletContext 对象销毁之后调用 */                                                             
    public void contextDestroyed(ServletContextEvent sce); 
}

如何使用 ServletContextListener 监听器监听 ServletContext 对象。

使用步骤如下:

1、编写一个类去实现 ServletContextListener

2、实现其两个回调方法

3、到 web.xml 中去配置监听器

监听器实现类:

public class MyServletContextListenerImpl implements ServletContextListener { 
    @Override 
    public void contextInitialized(ServletContextEvent sce) { 
        System.out.println("ServletContext 对象被创建了"); }
    @Override 
    public void contextDestroyed(ServletContextEvent sce) { 
    System.out.println("ServletContext 对象被销毁了"); 
    } 
}

web.xml :

 <!--配置监听器-->
    <listener>
        <listener-class>com.imooc.listener.MyServletContextListenerImpl</listener-class>
    </listener>