• Java Listener


    六、  Java Listener

    1.  Java Listener 简介

    * Java Listener
    1. Java Listener(即:Java 监听器):用于监听 ServletRequest、HttpSession、ServletContext 作用域对象的创建、销毁、及其属性修改变化
    2. 在 Web 项目中可以有多个 Java 监听器
    3. 应用场景:
    a.统计在线人数
    b.统计页面访问量
    c.服务器加载时数据初始化

    * Listener 的使用
    1. 在 web.xml 中配置监听器:
    <listener>
       <listener-class>com.ncdx.listener.MyListener</listener-class>
    </listener>

    2. 创建 Java 类,根据需求实现相应的接口:
    1)ServletRequestListener 接口 //声明了 ServletRequest 作用域对象的创建、销毁的监听方法
    2)ServletRequestAttributeListener 接口 //声明了 ServletRequest 作用域对象中属性的添加、修改、删除的监听方法

    3)HttpSessionListener 接口 //声明了 HttpSession 作用域对象的创建、销毁的监听方法
    4)HttpSessionAttributeListener 接口 //声明了 HttpSession 作用域对象中属性的添加、修改、删除的监听方法

    5)ServletContextListener 接口 //声明了 ServletContext 作用域对象的创建、销毁的监听方法
    6)ServletContextAttributeListener 接口 //声明了 ServletContext 作用域对象中属性的添加、修改、删除的监听方法

    3. 重写相应的监听方法
    import javax.servlet.ServletContextAttributeEvent;
    import javax.servlet.ServletContextAttributeListener;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.servlet.ServletRequestAttributeEvent;
    import javax.servlet.ServletRequestAttributeListener;
    import javax.servlet.ServletRequestEvent;
    import javax.servlet.ServletRequestListener;
    import javax.servlet.http.HttpSessionAttributeListener;
    import javax.servlet.http.HttpSessionBindingEvent;
    import javax.servlet.http.HttpSessionEvent;
    import javax.servlet.http.HttpSessionListener;
    
    
    public class MyListener implements ServletRequestListener,ServletRequestAttributeListener,
                                       HttpSessionListener,HttpSessionAttributeListener,
                                       ServletContextListener,ServletContextAttributeListener{
    
        @Override//监听request对象销毁
        public void requestDestroyed(ServletRequestEvent sre) {
    
        }
    
        @Override//监听request对象创建
        public void requestInitialized(ServletRequestEvent sre) {
    
        }
    
        @Override//监听request作用域数据的添加
        public void attributeAdded(ServletRequestAttributeEvent srae) {
        
        }
    
        @Override//监听request作用域数据的删除
        public void attributeRemoved(ServletRequestAttributeEvent srae) {
    
        }
    
        @Override//监听request作用域数据的修改
        public void attributeReplaced(ServletRequestAttributeEvent srae) {
    
        }
        
    /*.....................................................................*/
        
        @Override//监听session对象的创建
        public void sessionCreated(HttpSessionEvent se) {
    
        }
    
        @Override//监听session对象的销毁
        public void sessionDestroyed(HttpSessionEvent se) {
    
        }
    
        @Override//监听session作用域数据的添加
        public void attributeAdded(HttpSessionBindingEvent se) {
    
        }
    
        @Override//监听session作用域数据的删除
        public void attributeRemoved(HttpSessionBindingEvent se) {
            
        }
    
        @Override//监听session作用域数据的更改
        public void attributeReplaced(HttpSessionBindingEvent se) {
            
        }
    
    /*.........................................................................*/
    
        @Override//监听application对象销毁
        public void contextDestroyed(ServletContextEvent sce) {
            
        }
    
        @Override//监听application对象创建
        public void contextInitialized(ServletContextEvent sce) {
    
        }
    
        @Override//监听application作用域数据的添加
        public void attributeAdded(ServletContextAttributeEvent scae) {
    
        }
    
        @Override//监听application作用域数据的删除
        public void attributeRemoved(ServletContextAttributeEvent scae) {
            
        }
    
        @Override//监听application作用域数据的更改
        public void attributeReplaced(ServletContextAttributeEvent scae) {
            
        }
        
    }
    Listener

    2.  Java 监听器的实例

    /**
     * 模拟统计在线人数
     */
    
    public class MyListener implements ServletRequestListener,ServletRequestAttributeListener,
                                       HttpSessionListener,HttpSessionAttributeListener,
                                       ServletContextListener,ServletContextAttributeListener{
    
        @Override
        public void contextInitialized(ServletContextEvent sce) {//在ServletContext对象中存储变量用来统计在线人数
            //获取ServletContext
            ServletContext sc = sce.getServletContext();
            //在ServletContext对象中存储变量并初始化
            sc.setAttribute("count", 0);
        }
    
        @Override
        public void sessionCreated(HttpSessionEvent se) {//session被创建时人数自增
            //获取SerevletContext对象
            ServletContext sc = se.getSession().getServletContext();
            //获取在线人数的变量
            int count = (int)sc.getAttribute("count");
            //存储
            sc.setAttribute("count", ++count);
            //显示在线人数
            System.out.println("目前在线人数:" + se.getSession().getServletContext().getAttribute("count"));
        }
    
        @Override
        public void sessionDestroyed(HttpSessionEvent se) {//session被销毁时人数自减
            //获取SerevletContext对象
            ServletContext sc = se.getSession().getServletContext();
            //获取在线统计人数的变量
            int count = (int)sc.getAttribute("count");
            //存储
            sc.setAttribute("count", --count);
            //显示在线人数
            System.out.println("目前在线人数:" + se.getSession().getServletContext().getAttribute("count"));
        }
    
    }
  • 相关阅读:
    EventHandler 与常见的.Net预定义委托
    Consistent Hashing算法及相关技术
    全序, 分布式一致性的本质
    Paxos Made Simple
    Strong Consistency, 强一致性技术概述
    Chubby lock service for looselycoupled distributed systems
    AntiEntropy Protocols
    Mesos: A Platform for FineGrained Resource Sharing in the Data Center
    Spark A FaultTolerant Abstraction for InMemory Cluster Computing
    Vector Clocks, 时间向量
  • 原文地址:https://www.cnblogs.com/IT-LFP/p/11693101.html
Copyright © 2020-2023  润新知