11.Listener

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对象又活化了");
          }
      }
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值