zoukankan      html  css  js  c++  java
  • java web学习:三大组件 Listener基础

    1、概念

    事件源:被监听的对象 。监听器主要监听三个域对象 ,分别是 request  session  servletContext

    监听器:用来监听某个对象状态变化的组件

    响应行为:监听器监听的对象相应的状态发生变化时出发的动作。

    2、Listener分类

    在java web中,监听器的种类比较多,可以按照事件源(监听的对象)进行分类,也可以按照监听的动作进行分类。这里按照监听的动作进行分类。

    (1)监听域对象自身创建和销毁的监听器:

    ①ServletContextListener接口 监听 SercvletContext对象

    ②HttpSessionListener接口 监听 HttpSession对象

    ③ServletRequestListener接口 监听 ServletRequest对象

    (2)监听域对象中的属性的增加、修改和删除的事件监听器

    ⑤HttpSessionAttributeListener接口 监听 HttpSession对象属性

    ⑥ServletRequestAttributeListener接口 监听 ServletRequest对象属性

    (3)监听绑定到 HttpSession 域中某个对象的状态的事件监听器

    ⑦HttpSessionBindingListener接口 监听 实现了HttpSessionBindingListener接口的对象的session绑定和解除

    ⑧HttpSessionActivationListener接口 (实现会话的持久化)

    3、例子

    (1)定义监听器

    package com.web.listener;
    
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    
    
    
    public class MyListener implements ServletContextListener {
    
        static {
            System.out.println("MyListener加载了");
        }
        
        public MyListener() {
          System.out.println("MyListener实例化了");
        }
    
        
        public void contextDestroyed(ServletContextEvent sce)  { 
           
        }
    
        
        public void contextInitialized(ServletContextEvent sce)  { 
            sce.getServletContext();
            System.out.println("ServletContext创建开始");
        }
        
    }
    package com.web.listener;
    
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
    
    public class MySessionListener implements HttpSessionListener {
    
        static {
            System.out.println("MySessionListener加载了");
        }
        
        public MySessionListener() {
            System.out.println("MySessionListener实例化了");
        }
    
        
        public void sessionCreated(HttpSessionEvent se)  { 
        }
    
        
        public void sessionDestroyed(HttpSessionEvent se)  { 
        }
        
    }
    package com.web.listener;
    
    import javax.servlet.ServletRequestEvent;
    import javax.servlet.ServletRequestListener;
    
    public class MyRequestListener implements ServletRequestListener{
        static {
            System.out.println("MyRequestListener加载了");
        }
        
        public MyRequestListener(){
            System.out.println("MyRequestListener实例化了");
        }
        
        public  void requestDestroyed (ServletRequestEvent sre) {
        }
    
      
        public  void requestInitialized (ServletRequestEvent sre) {}
    
    }

    (2)注册监听器

    <!-- 注册监听器 -->
    <listener>
        <listener-class>com.web.listener.MyRequestListener</listener-class>
    </listener>
    
    <listener>
        <listener-class>com.web.listener.MySessionListener</listener-class>
    </listener>
    <listener>
        <listener-class>com.web.listener.MyListener</listener-class>
    </listener>

    (3)执行结果

    监听器的加载顺序时web.xml中配置的顺序一直

    4、生命周期

    监听器在容器启动时加载并且实例化,容器关闭时销毁。

    5、监听器,过滤器,Servlet三大组件的加载顺序

    监听器与过滤器都是在web容器启动时就加载,但是监听器加载的更早。Servlet默认时在第一次访问时加载,通过<load-on-startup>标签可以配置成web容器启动时就加载,但是Servlet加载的时机是三大组件中最晚的。

    所以三大组件的加载顺序是:Listener ->Filter->Servlet

  • 相关阅读:
    MPS和MRP之间有什么样的关系呢
    java中静态代码块详解
    SQL server 分组后每组取出任意一行
    人是否能成功,其实可能很早就能看出来
    国内外产品经理的区别
    Yarn 和 NPM 国内快速镜像(淘宝镜像)
    vue-cli 使用less 遇到的问题 || vue-cli 使用less
    布隆过滤器
    PHP性能优化
    Redis-高并发代言词,为什么做分布式要Redis?
  • 原文地址:https://www.cnblogs.com/cplinux/p/12427420.html
Copyright © 2011-2022 走看看