• Javaweb基础--->监听器listener(转发)


    JavaWeb中的监听器

    1、基本概念

      JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件。

    2、Servlet监听器的分类

      在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源分别为ServletContextHttpSessionServletRequest这三个域对象
      Servlet规范针对这三个对象上的操作,又把多种类型的监听器划分为三种类型:

    1. 监听域对象自身的创建和销毁的事件监听器。
    2. 监听域对象中的属性的增加和删除的事件监听器。
    3. 监听绑定到HttpSession域中的某个对象的状态的事件监听器。

    3、监听ServletContext域对象的创建和销毁

      ServletContextListener接口用于监听ServletContext对象的创建和销毁事件。实现了ServletContextListener接口的类都可以对ServletContext对象的创建和销毁进行监听。

      当ServletContext对象被创建时,激发contextInitialized (ServletContextEvent sce)方法。

      当ServletContext对象被销毁时,激发contextDestroyed(ServletContextEvent sce)方法。

      ServletContext域对象创建和销毁时机:
        创建:服务器启动针对每一个Web应用创建ServletContext
        销毁:服务器关闭前先关闭代表每一个web应用的ServletContext

      范例:编写一个MyServletContextListener类,实现ServletContextListener接口,监听ServletContext对象的创建和销毁

      3-1、编写监听器,代码如下:

    package com.hanqi.maya.listener;
    
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    
    /**
    * @ClassName: MyServletContextListener
    * @Description: MyServletContextListener类实现了ServletContextListener接口,
    *                 因此可以对ServletContext对象的创建和销毁这两个动作进行监听。
    
    *
    */ 
    public class MyServletContextListener implements ServletContextListener {
    
        @Override
        public void contextInitialized(ServletContextEvent sce) {
            System.out.println("ServletContext对象创建");
        }
    
        @Override
        public void contextDestroyed(ServletContextEvent sce) {
            System.out.println("ServletContext对象销毁");
        }
    }

      3-2、在web.xml文件中注册监听器

      我们在上面的中讲到,要想监听事件源,那么必须将监听器注册到事件源上才能够实现对事件源的行为动作进行监听,在JavaWeb中,监听的注册是在web.xml文件中进行配置的,如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" 
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
      
      <!-- 注册针对ServletContext对象进行监听的监听器 -->
      <listener>
          <description>ServletContextListener监听器</description>
          <!--实现了ServletContextListener接口的监听器类 -->
          <listener-class>com.hanqi.maya.listener.MyServletContextListener</listener-class>
      </listener>
      
    </web-app>

    经过这两个步骤,我们就完成了监听器的编写和注册,Web服务器在启动时,就会自动把在web.xml中配置的监听器注册到ServletContext对象上,这样开发好的MyServletContextListener监听器就可以对ServletContext对象进行监听了。

    4、监听HttpSession域对象的创建和销毁

      HttpSessionListener 接口用于监听HttpSession对象的创建和销毁
      创建一个Session时,激发sessionCreated (HttpSessionEvent se) 方法
      销毁一个Session时,激发sessionDestroyed (HttpSessionEvent se) 方法。

    范例:编写一个MyHttpSessionListener类,实现HttpSessionListener接口,监听HttpSession对象的创建和销毁

      4-1、编写监听器,代码如下:

    package com.hanqi.maya.listener;
    
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
    
    /**
    * @ClassName: MyHttpSessionListener
    * @Description: MyHttpSessionListener类实现了HttpSessionListener接口,
    *                 因此可以对HttpSession对象的创建和销毁这两个动作进行监听。
    *
    */ 
    public class MyHttpSessionListener implements HttpSessionListener {
    
        @Override
        public void sessionCreated(HttpSessionEvent se) {
            System.out.println( se.getSession() + "创建了!!");
        }
    
        /* HttpSession的销毁时机需要在web.xml中进行配置,如下:
         * <session-config>
                  <session-timeout>1</session-timeout>
              </session-config>
              这样配置就表示session在1分钟之后就被销毁
         */
        @Override
        public void sessionDestroyed(HttpSessionEvent se) {
            System.out.println("session销毁了!!");
        }
    }

      4-2、在web.xml文件中注册监听器

    <!--注册针对HttpSession对象进行监听的监听器-->
       <listener>
          <description>HttpSessionListener监听器</description>
          <listener-class>com.hanqi.maya.listener.MyHttpSessionListener</listener-class>
      </listener>
      <!-- 配置HttpSession对象的销毁时机 -->
      <session-config>
          <!--配置HttpSession对象的1分钟之后销毁 -->
          <session-timeout>1</session-timeout>
      </session-config>

      当我们访问jsp页面时,HttpSession对象就会创建,此时就可以在HttpSessionListener观察到HttpSession对象的创建过程了,我们可以写一个jsp页面观察HttpSession对象创建的过程。

    5、监听ServletRequest域对象的创建和销毁

      ServletRequestListener接口用于监听ServletRequest 对象的创建和销毁
      Request对象被创建时,监听器的requestInitialized(ServletRequestEvent sre)方法将会被调用
      Request对象被销毁时,监听器的requestDestroyed(ServletRequestEvent sre)方法将会被调用

      ServletRequest域对象创建和销毁时机:
        创建:用户每一次访问都会创建request对象
        销毁:当前访问结束,request对象就会销毁

    范例:编写一个MyServletRequestListener类,实现ServletRequestListener接口,监听ServletRequest对象的创建和销毁

      5-1、编写监听器,代码如下:

    package com.hanqi.maya.listener;
    
    import javax.servlet.ServletRequestEvent;
    import javax.servlet.ServletRequestListener;
    
    /**
    * @ClassName: MyServletRequestListener
    * @Description: MyServletRequestListener类实现了ServletRequestListener接口,
    *                 因此可以对ServletRequest对象的创建和销毁这两个动作进行监听。
    *
    */ 
    public class MyServletRequestListener implements ServletRequestListener {
    
        @Override
        public void requestDestroyed(ServletRequestEvent sre) {
            System.out.println(sre.getServletRequest() + "销毁了!!");
            
        }
    
        @Override
        public void requestInitialized(ServletRequestEvent sre) {
            System.out.println(sre.getServletRequest() + "创建了!!");
        }
    }

      5-2、在web.xml文件中注册监听器

      <!--注册针对ServletRequest对象进行监听的监听器-->
      <listener>
          <description>ServletRequestListener监听器</description>
          <listener-class>com.hanqi.maya.listener.MyServletRequestListener</listener-class>
       </listener>

    原博主博客:http://www.cnblogs.com/xdp-gacl/p/3961929.html

  • 相关阅读:
    “家里养的花自杀了,遗书写道,一生不愁吃穿,唯独缺少阳光和爱。”——周国平 《爱与孤独》
    “在黑白里温柔地爱彩色,在彩色里朝圣黑白。”——汪曾祺
    “生命是有光的,在我熄灭以前,能够照亮你一点,就是我所有能做的了。我爱你,你要记得我。”                                           ——《云边有个小卖部》
    “那个人也许永远不会回来,那个人也许明天回来。”——《边城》
    杨绛《一百岁感言》
    成长就是承认“平凡”
    “我们都生活在稍微一不努力就会被淘汰的城市。看不透人心,说不尽的谎话,到处都充满了现实的味道!”
    坦白书里面写到我所有的自负都来自我的自卑,所有的英雄气概都来自于我内心的软弱,所有的振振有词,其实都是因为心中满是怀疑,我假装无情其实是痛恨自己的深情,我以为人生的意义在于四处浪荡流亡。
    轮播图
    简易贪吃蛇
  • 原文地址:https://www.cnblogs.com/sutao/p/7456817.html
Copyright © 2020-2023  润新知