zoukankan      html  css  js  c++  java
  • 监听器

      问题:

       在 Servlet 技 术 中 我 们 学 习 了 request 、 session 、
    application 作用域对象,其主要作用是实现数据的在不同
    场景中的灵活流转。但是数据的具体流转过程我们是看不
    到的,比如作用域对象是什么时候创建和销毁的,数据是
    什么时候存取,改变和删除的。因为具体的流转过程看不
    到,所以也就无法再指定的时机对数据和对象进行操作,
    比如 session 销毁的时候,在线人数-1。

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

     1 /**
     2  * 监听器的使用:
     3  *     作用:
     4  *         监听作用域对象request、session、application的创建、销毁和内容的改变
     5  *     使用:
     6  *         创建一个实现了指定接口的java类
     7  *             监听request--->ServletRequestListener  监听request对象的创建和销毁
     8  *                 requestInitialized(ServletRequestEvent sre)//创建
     9  *                 requestDestroyed(ServletRequestEvent sre)//销毁
    10  *                 注意:
    11  *                     形参可以获取监听的request对象
    12  *                     sre.getServletRequest();
    13  *            监听request--->ServletRequestAttributeListener  监听request作用域数据的变更。
    14                 attributeAdded(ServletRequestAttributeEvent srae)
    15  *                 attributeRemoved(ServletRequestAttributeEvent srae)    
    16  *                 attributeReplaced(ServletRequestAttributeEvent srae)
    17  *                 注意:形参可以获取被监听的数据    
    18  *                     srae.getName()  获取监听数据的键
    19  *                     srae.getValue() 获取监听数据的值
    20  *            监听session--->HttpSessionListener 监听session的创建和销毁
    21  *                sessionCreated(HttpSessionEvent se)  创建
    22  *                sessionDestroyed(HttpSessionEvent se) 销毁
    23  *                注意:形参可以获取被监听的session对象
    24  *                    se.getSession();
    25  *            监听session--->HttpSessionAttributeListener 监听session数据的变更
    26  *                attributeAdded(HttpSessionBindingEvent event)
    27  *                attributeRemoved(HttpSessionBindingEvent event)
    28  *                attributeReplaced(HttpSessionBindingEvent event)
    29  *                注意:形参可以获取被监听的数据
    30  *                    event.getName()     获取数据的键名
    31  *                    event.getValue()    获取数据的值
    32  *            监听application--->ServletContextListener 监听application对象的初始化和销毁
    33  *                contextInitialized(ServletContextEvent sce) 初始化    服务器启动
    34  *                contextDestroyed(ServletContextEvent sce)    销毁         服务器关闭
    35  *                注意:
    36  *                    形参可以获取当前application对象。
    37  *                    sce.getServletContext();
    38              监听application--->ServletContextAttributeListener 监听数据的变更
    39                      attributeAdded(ServletContextAttributeEvent event)
    40  *                    attributeRemoved(ServletContextAttributeEvent event)
    41  *                    attributeReplaced(ServletContextAttributeEvent event)
    42  *                注意:
    43  *                    形参可以获取当前监听的数据
    44  *                    event.getName()  获取数据的键名
    45  *                    event.getValue() 获取数据的值
    46  *         在web.xml中配置监听器类
    47  *             <listener>
    48                 <listener-class>com.bjsxt.listener.MyListener</listener-class>
    49             </listener>
    50         案例:
    51             统计当前在线人数。
    52             统计网页浏览器次数。
    53  * 54  *
    55  */
    public class MyListener implements ServletRequestListener,ServletRequestAttributeListener,HttpSessionListener,HttpSessionAttributeListener,ServletContextListener,ServletContextAttributeListener{
        //request对象销毁
        @Override
        public void requestDestroyed(ServletRequestEvent sre) {
            System.out.println("我被销毁了");
            
        }
        //request对象创建
        @Override
        public void requestInitialized(ServletRequestEvent sre) {
            System.out.println("我被创建了");
            
        }
        //监听request作用域数据的添加
        @Override
        public void attributeAdded(ServletRequestAttributeEvent srae) {
            
            System.out.println("request中增加了一条数据-"+srae.getName()+":"+srae.getValue());
            
        }
        @Override
        public void attributeRemoved(ServletRequestAttributeEvent srae) {
            // TODO Auto-generated method stub
            
        }
        @Override
        public void attributeReplaced(ServletRequestAttributeEvent srae) {
            // TODO Auto-generated method stub
            
        }
    /*------------------------------------------------------------------------------*/
        //监听session的创建
        @Override
        public void sessionCreated(HttpSessionEvent se) {
            System.out.println("session被创建了");
            
        }
        //监听session的销毁
        @Override
        public void sessionDestroyed(HttpSessionEvent se) {
            System.out.println("session被销毁了");
            
        }
        //监听session数据的表更
        @Override
        public void attributeAdded(HttpSessionBindingEvent event) {
            System.out.println("session中增加了一条数据"+event.getName()+":"+event.getValue());
        }
        @Override
        public void attributeRemoved(HttpSessionBindingEvent event) {
            // TODO Auto-generated method stub
            
        }
        @Override
        public void attributeReplaced(HttpSessionBindingEvent event) {
            // TODO Auto-generated method stub
            
        }
    /*------------------------------------------------------------------------------*/
        @Override
        public void contextInitialized(ServletContextEvent sce) {
            System.out.println("application对象被初始化了");
            
        }
        @Override
        public void contextDestroyed(ServletContextEvent sce) {
            System.out.println("application对象被销毁了");
            
        }
        //监听application的数据变更
        @Override
        public void attributeAdded(ServletContextAttributeEvent event) {
            System.out.println("application中存储了数据:"+event.getName()+":"+event.getValue());
            
        }
        @Override
        public void attributeRemoved(ServletContextAttributeEvent event) {
            // TODO Auto-generated method stub
            
        }
        @Override
        public void attributeReplaced(ServletContextAttributeEvent event) {
            // TODO Auto-generated method stub
            
        }
            
        
    }
  • 相关阅读:
    Python多进程实现并行化随机森林
    Python多进程队列间传递对象
    Umlet和draw.io 使用心得
    简单认识Adam优化器
    使用BERT进行情感分类预测及代码实例
    【深度学习】深入理解Batch Normalization批标准化
    Vue插件总结
    Vue配置环境识别
    pc端微信上传BUG
    Vue原生订单列表
  • 原文地址:https://www.cnblogs.com/vieta/p/11139276.html
Copyright © 2011-2022 走看看