美文网首页
黑猴子的家:JavaWeb 之 Servlet Listener

黑猴子的家:JavaWeb 之 Servlet Listener

作者: 黑猴子的家 | 来源:发表于2019-12-13 10:23 被阅读0次

    1、监听器简介

    Listener是JavaWeb中三大组件之一。Servlet、Filter、Listener
    三大组件都有的共同特点,都需要实现一个接口,并在web.xml文件配置。
    JavaWeb中的监听器的监听对象是谁?
        ServletContext
        HttpSession
        ServletRequest

    2、监听器分类

    JavaWeb中的监听器共有三种,共8个监听器
        - 生命周期监听器,监听三个对象的创建和销毁的事件。
        - 属性监听器,监听三个对象中属性的变化。
        - session对象监听器,将它session中的属性,以及session的活化和钝化。

    3、生命周期监听器

    1)ServletContextListener

        - ServletContext生命周期监听器
         - void contextDestroyed(ServletContextEvent sce)
        - 该方法在ServletContext对象销毁前调用
         - void contextInitialized(ServletContextEvent sce)
        - 该方法在ServletContext对象创建之前调用。
        - ServletContextEvent 对象可以获取到ServletContext对象
        ServletContextEvent.getServletContext();

    2)HttpSessionListener

        - HttpSession生命周期监听器
            - void sessionCreated(HttpSessionEvent se)
            - 该方法在Session创建时调用
             - void sessionDestroyed(HttpSessionEvent se)
            - 在session销毁时调用
            - HttpSessionEvent
            - 可以获取HttpSession对象

    3)ServletRequestListener

        - void requestDestroyed(ServletRequestEvent sre)
        - 在request对象销毁时调用
        - void requestInitialized(ServletRequestEvent sre)
        - 在request对象创建时调用
        - ServletRequestEvent
        可以获取ServletContext对象和ServletRequest

    4)编写一个监听器的步骤

        (1)创建一个类并实现一个接口。
        (2)在web.xml文件中注册监听器。

    4、属性监听器

    属性监听器,监听三个域中的属性的变化:添加一个属性,替换一个属性,移除一个属性

    1)ServletContextAttributeListener

        - 监听ServletContext中的属性的变化
        void attributeAdded(ServletContextAttributeEvent scab)
        - 当向ServletContext中添加属性时调用
        attributeRemoved(ServletContextAttributeEvent scab)
        - 移除属性时调用
        attributeReplaced(ServletContextAttributeEvent scab)
        - 替换一个属性时调用

    2)HttpSessionAttributeListener

        void attributeAdded(HttpSessionBindingEvent se)
        void attributeRemoved(HttpSessionBindingEvent se)
        void attributeReplaced(HttpSessionBindingEvent se)
        - HttpSessionBindingEvent
            (1)可以获取到属性名 getName()
            (2)可以获取属性的旧值 getValue()
            (3)可以获取到HttpSession对象 getSession();

    3)ServletRequestAttributeListener

        void attributeAdded(ServletRequestAttributeEvent srae)
        void attributeRemoved(ServletRequestAttributeEvent srae)
        void attributeReplaced(ServletRequestAttributeEvent srae)
        以下两个监听器监听session域中的属性的。

    5、HttpSessionBindingListener

        监听session域中某一个类的实例的添加和移除。
        该接口由JavaBean来实现,不需要再web.xml文件配置
            valueBound(HttpSessionBindingEvent event)
            - 当该类的实例,作为属性设置进session域中时调用
            valueUnbound(HttpSessionBindingEvent event)
            - 当该类的实例,从session域中被移除时调用

    6、HttpSessionActivationListener

    监听session域中的某类属性,和session一起活化和钝化的事件。
    该接口由JavaBean来实现,同样不需要再web.xml中配置
        void sessionDidActivate(HttpSessionEvent se)
        - 当前对象和session一起被活化到内存时调用
        void sessionWillPassivate(HttpSessionEvent se)
        当前对象和session一起钝化到硬盘时调用

    7、code

    1)InitDBDataListener
    package com.alex.web.listener;
    
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    
    /**
     * ServletContextListener : 用于监听ServletContext 对象(application)的创建和销毁
     *
     */
    public class InitDBDataListener implements ServletContextListener {
        
        public InitDBDataListener(){
            System.out.println("InitDBDataListener 对象被创建了");
        }
    
        // 用于监听application对象销毁后,需要执行的业务逻辑
        @Override
        public void contextDestroyed(ServletContextEvent sce) {
            System.out.println(InitDBDataListener.class.getName() + "- contextDestroyed 执行了 - 删除数据库模拟数据");
        }
    
        // 用于监听application对象创建后需要执行的业务逻辑
        // application 对象在服务器启动时,加载当前项目创建
        @Override
        public void contextInitialized(ServletContextEvent sce) {
            System.out.println(InitDBDataListener.class.getName() + "- contextInitialized 执行了 - 往数据库插入了模拟数据");
        }
    }
    
    2)web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
        http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
        id="WebApp_ID" version="3.1">
        <display-name>web_listener</display-name>
    <!-- 
        web 开发三大组件: listener、filter、servlet
             同时存在的时候,在web.xml创建的先后顺序
        listener  >   filter  >  servlet
     -->
        <!-- 监听器对象,服务器启动时 -->
        <listener>
            <listener-class>com.alex.web.listener.InitDBDataListener</listener-class>
        </listener>
        <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>
    </web-app>
    

    相关文章

      网友评论

          本文标题:黑猴子的家:JavaWeb 之 Servlet Listener

          本文链接:https://www.haomeiwen.com/subject/fpaxnctx.html