首页 > 其他分享 >Servlet27 - Listener 监听器

Servlet27 - Listener 监听器

时间:2023-01-25 14:44:06浏览次数:39  
标签:调用 监听器 监听 Listener application ServletContext Servlet27 IOC public

Listener

监听 xxx 对象的 xxx 过程

  • ServletContextListener

    • 监听ServletContext对象的创建与销毁

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

    • 监听HttpSession对象的创建与销毁

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

    • 监听ServletRequest对象的创建与销毁

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

    • 监听ServletContext中属性的创建、修改和销毁

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

    • 监听HttpSession中属性的创建、修改和销毁

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

    • 监听ServletRequest中属性的创建、修改和销毁

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

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

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

    • 监听某个对象在Session中的序列化与反序列化

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

1. 配置 Listener

  • web.xml 文件中配置

    • <!-- 每一个listener标签对应一个监听器配置,若有多个监听器,则配置多个listener标签即可 -->
      <listener>
          <!-- 配置监听器指定全类名即可 -->
          <listener-class>com.atguigu.listener.AtguiguListener</listener-class>
      </listener>
      
  • 注解配置 @WebListener

    • @WebListener
      public class AtguiguListener implements ServletContextListener {
       ...
      }
      

2. 重写 Listener 方法

public class AtguiguListener implements ServletContextListener {
	@Override
    public void contextInitialized(
            // Event对象代表本次事件,通过这个对象可以获取ServletContext对象本身
            ServletContextEvent sce) {
        System.out.println("Hello,我是ServletContext,我出生了!");

        ServletContext servletContext = sce.getServletContext();
        System.out.println("servletContext = " + servletContext);
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("Hello,我是ServletContext,我打算去休息一会儿!");
    }
}

3. Listener 使用实例

没有监听时,IOC 容器的创建在 DispatcherServlet 初始化方法中,会导致初始化速度下降

  • public class DispatcherServlet extends ViewBaseServlet{
        ...
        public void init() throws ServletException {
            super.init();
            beanFactory = new ClassPathXmlApplicationContext();
        }
        ...
    }
    

通过监听上下文启动,在上下文启动时创建 IOC 容器

  • //监听上下文启动,在上下文启动的时候去创建IOC容器,然后将其保存到application作用域
    //后面中央控制器再从application作用域中去获取IOC容器
    @WebListener
    public class ContextLoaderListener implements ServletContextListener {
        @Override
        public void contextInitialized(ServletContextEvent servletContextEvent) {
            //1.获取ServletContext对象
            ServletContext application = servletContextEvent.getServletContext();
            //2.获取上下文的初始化参数
            String path = application.getInitParameter("contextConfigLocation");
            //3.创建IOC容器
            BeanFactory beanFactory = new ClassPathXmlApplicationContext(path);
            //4.将IOC容器保存到application作用域
            application.setAttribute("beanFactory",beanFactory);
        }
    
        @Override
        public void contextDestroyed(ServletContextEvent servletContextEvent) {
        }
    }
    
  • DispatcherServlet 初始化方法中,只需要从 application 作用域中获取 IOC 容器,提高了初始化速度

  • public class DispatcherServlet extends ViewBaseServlet{
        ...
    	public void init() throws ServletException {
            super.init();
            //之前是在此处主动创建IOC容器的
            //现在优化为从application作用域去获取
            //beanFactory = new ClassPathXmlApplicationContext();
            ServletContext application = getServletContext();
            Object beanFactoryObj = application.getAttribute("beanFactory");
            if(beanFactoryObj!=null){
                beanFactory = (BeanFactory)beanFactoryObj ;
            }else{
                throw new RuntimeException("IOC容器获取失败!");
            }
        }
        ...
    }
    

标签:调用,监听器,监听,Listener,application,ServletContext,Servlet27,IOC,public
From: https://www.cnblogs.com/Ashen-/p/17066921.html

相关文章

  • spring boot——请求与参数校验——重要概念——配置Servlet、Filter、Listener——代
          代码配置:packageorg.example.webFilter.config;importorg.example.webFilter.filter.FirstFilter;importorg.example.webFilter.listener.Firs......
  • listener
    listener表示监听器。Javaweb三大组件(servlet、filter、listener)之一。监听器就是在application,session,request三个对象创建、销毁或者往其中添加修改删除属性时,自动执行......
  • 【Java】监听jframe窗口大小改变函数:addComponentListener
    问题描述:主要用于解决Jframe窗口大小变化时,里面的组件的位置也会自适应的移动。相当于js里面的窗口大小改变监听函数:window.onresize=function(){//js脚本接口}......
  • SpringBoot——监听器解析
    监听器模式监听器模式有要素事件监听器广播器触发机制系统监听器监听器ApplicationListener@FunctionalInterfacepublicinterfaceApplicationListener<Eext......
  • Listener
    1.概念:  *web三大组件之一    *事件:一件事情    *事件源:事件发生的地方    *监听器:一个对象    *注册监听:将事件,事件源,监听器绑定在一起。当事件源......
  • HttpListener简单使用
    封装了一个简单便捷使用HttpListener的类,可直接添加接口,实现处理逻辑。1usingSystem;2usingSystem.Collections.Concurrent;3usingSystem.Collections.Gen......
  • 11.Listener
    Listener笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html)视频教程(P137)概念:Listener表示监听器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。......
  • SpringBoot——过滤器、监听器、拦截器
    前言在实际开发过程中,经常会碰见一些比如系统启动初始化信息、统计在线人数、在线用户数、过滤敏高词汇、访问权限控制(URL级别)等业务需求。这些对于业务来说一般上是无关......
  • JavaWeb三大组件之监听器-Listener
    1.JavaWeb三大组件Servlet程序,Listener监听器,Filter过滤器2.Listener监听器监听某种变化(生命周期监听,属性变化监听),做出反应--触发对应方法完成相应任务;监听器实现接口......
  • watch监听器
    watch的基本用法:  也可以用数组的方式同时监听多个 深度监听:使用ref需要开启深度监听才可以监听到里面的值使用reactive不需要开启也可以监听到里面的值,因为源......