监听器

  问题:

   在 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
        
    }
        
    
}
原文地址:https://www.cnblogs.com/vieta/p/11139276.html