JavaWeb三大组件 —— Listener监听器——生命周期监听器(3个)

目录
    1、JavaWeb八大监听器概述
    2、生命周期监听器(3个)
    3、操作域属性的监听器(3个)
    4、相关HttpSession的感知监听器(2个)
===================================================================================================
1、JavaWeb八大监听器概述
    JavaWeb三大组件:Servlet、Listener、Filter,其中Servlet在之前的博文中已经做了较为详细的讲解,下面开始拆解Listener监听器。
    JavaWeb中的八大监听器,三大域对象各有一个生命周期监听器和属性操作监听器,共计6个;还有2个与HttpSession相关的感知型监听器。
    Listener:监听器
        1.它是一个接口,内容由我们来实现;
        2.它需要注册在事件源上,例如注册在按钮上;
        3.监听器中的方法,会在特殊事件发生时被调用!
    在JavaWeb被监听的事件源为JavaWeb的三大域对象:ServletContext、HttpSession、ServletRequest
    功能:监听域对象"创建"与"销毁"的监听器;(生命周期监听器3个)
          监听域对象"操作域属性"的监听器;(属性操作监听器3个)
          感知型监听器。(2个)

2、生命周期监听器(3个)
    一共有三个,每个域对象各一个,需要在web.xml文件中配置监听器:
    ServletContextListener:Tomcat启动和关闭时调用下面两个方法
        public void contextInitialized(ServletContextEvent evt):ServletContext对象被创建后调用;
        public void contextDestroyed(ServletContextEvent evt):ServletContext对象被销毁前调用;
    HttpSessionListener:开始会话和结束会话时调用下面两个方法
        public void sessionCreated(HttpSessionEvent evt):HttpSession对象被创建后调用;
        public void sessionDestroyed(HttpSessionEvent evt):HttpSession对象被销毁前调用;
    ServletRequestListener:开始请求和结束请求时调用下面两个方法
        public void requestInitiallized(ServletRequestEvent evt):ServletRequest对象被创建后调用;
        public void requestDestroyed(ServletRequestEvent evt):ServletRequest对象被销毁前调用。
      生命周期监听器参数:事件对象
        ServletContextEvent:方法 ServletContext getServletContext();
        HttpSeessionEvent:方法 HttpSession getSession();
        ServletRequestEvent:方法
            ServletRequest getServletRequest()
            ServletContext getServletContext()
    编写测试例子:
        编写MyServletContextListener类,实现ServletContextListener接口;
        在web.xml文件中配置监听器;
        为了看到session销毁的效果,在web.xml文件中设置session失效时间为1分钟;
        /*
        * ServletContextListener实现类
        * contextDestroyed() -- 在ServletContext对象被销毁前调用
        * contextInitialized() --  -- 在ServletContext对象被创建后调用
        * ServletContextEvent -- 事件类对象
        *     该类有getServletContext(),用来获取ServletContext对象,即获取事件源对象
        */
        public class MyServletContextListener implements ServletContextListener {
            public void contextInitialized(ServletContextEvent evt) {
                System.out.println("ServletContext对象被创建后调用,已创建ServletContext对象");
            }
            public void contextDestroyed(ServletContextEvent evt) {
                System.out.println("ServletContext对象被销毁前调用,即将销毁ServletContext对象");
            }
        }
        /*
        * HttpSessionListener实现类
        * sessionCreated() -- 在HttpSession对象被创建后被调用
        * sessionDestroyed() --  -- 在HttpSession对象被销毁前调用
        * HttpSessionEvent -- 事件类对象
        *     该类有getSession(),用来获取当前HttpSession对象,即获取事件源对象
        */
        public class MyHttpSessionListener implements HttpSessionListener {
            public void sessionCreated(HttpSessionEvent evt) {
                System.out.println("创建session对象");
            }
            public void sessionDestroyed(HttpSessionEvent evt) {
                System.out.println("销毁session对象");
            }
        }
        /*
        * ServletRequestListener实现类
        * requestDestroyed() -- 在ServletRequest对象被销毁前调用
        * requestInitialized() -- 在ServletRequest对象被创建后调用
        * ServletRequestEvent -- 事件类对象
        *     该类有getServletContext(),用来获取ServletContext对象
        *     该类有getServletRequest(),用来获取当前ServletRequest对象,即事件源对象
        */
        public class MyServletRequestListener implements ServletRequestListener {
            public void requestDestroyed(ServletRequestEvent evt) {
                System.out.println("销毁request对象");
            }
            public void requestInitialized(ServletRequestEvent evt) {
                System.out.println("创建request对象");
            }
        }

        <listener>
            <listener-class>cn.zzq.listener.MyServletContextListener</listener-class>
        </listener>
        <listener>
            <listener-class>cn.zzq.listener.MyHttpSessionListener</listener-class>
        </listener>
        <listener>
            <listener-class>cn.zzq.listener.MyServletRequestListener</listener-class>
        </listener>
        <session-config>
            <session-timeout>1</session-timeout> //session过期时间为1分钟,单位:分钟
        </session-config>

猜你喜欢

转载自blog.csdn.net/weixin_42472048/article/details/82942776