JavaWeb 监听器

一、概述

 监听器:专门用于对域对象对象身上发生的事件或状态改变进行监听和相应处理的对象

 监听器是GOF设计模式中,观察者模式的典型案例

 观察者模式: 当被观察的对象发生某些改变时, 观察者自动采取对应的行动的一种设计模式

 监听器并不监听web项目中的所有组件,仅仅是对三大域对象做相关的事件监听

 

二、监听器的分类

+ web中定义八个监听器接口作为监听器的规范,这八个接口按照不同的标准可以形成不同的分类

+ 按监听的对象划分

    + application域监听器 ServletContextListener  ServletContextAttributeListener

    + session域监听器 HttpSessionListener  HttpSessionAttributeListener  HttpSessionBindingListener  HttpSessionActivationListener  

    + request域监听器 ServletRequestListener  ServletRequestAttributeListener

三、三种对象域的监听器

(1)应用域

@WebListener

public class myApplicationListener implements ServletContextListener, ServletContextAttributeListener {

    @Override

    public void contextInitialized(ServletContextEvent sce) {

        ServletContext application = sce.getServletContext();

        System.out.println(application.hashCode()+"应用域初始化了");

    }

    @Override

    public void contextDestroyed(ServletContextEvent sce) {

        ServletContext application = sce.getServletContext();

        System.out.println(application.hashCode()+"应用域销毁了");

    }

    @Override

    public void attributeAdded(ServletContextAttributeEvent scae) {

        ServletContext servletContext = scae.getServletContext();

        String name = scae.getName();

        Object value = scae.getValue();

        System.out.println(servletContext.hashCode()+"应用域增加了"+name+":"+value);

    }

    @Override

    public void attributeRemoved(ServletContextAttributeEvent scae) {

        ServletContext servletContext = scae.getServletContext();

        String name = scae.getName();

        Object value = scae.getValue();

        System.out.println(servletContext.hashCode()+"应用域销毁了"+name+":"+value);

    }

    @Override

    public void attributeReplaced(ServletContextAttributeEvent scae) {

        ServletContext servletContext = scae.getServletContext();

        String name = scae.getName();

        Object value = scae.getValue();

        Object newAttribute = servletContext.getAttribute(name);

        System.out.println(servletContext.hashCode()+"应用域改变了"+name+":"+value);

    }

}

(2)会话域

session绑定监听器

> HttpSessionBindingListener 监听当前监听器对象在Session域中的增加与移除

| 方法名                                      | 作用                              |

| ------------------------------------------- | --------------------------------- |

| valueBound(HttpSessionBindingEvent event)   | 该类的实例被放到Session域中时调用 |

| valueUnbound(HttpSessionBindingEvent event) | 该类的实例从Session中移除时调用   |

+ HttpSessionBindingEvent对象代表属性变化事件,它包含的方法如下:

| 方法名       | 作用                          |

| ------------ | ----------------------------- |

| getName()    | 获取当前事件涉及的属性名      |

| getValue()   | 获取当前事件涉及的属性值      |

| getSession() | 获取触发事件的HttpSession对象 |

钝化活化监听器

> HttpSessionActivationListener  监听某个对象在Session中的序列化与反序列化。

| 方法名                                    | 作用                                  |

| ----------------------------------------- | ------------------------------------- |

| sessionWillPassivate(HttpSessionEvent se) | 该类实例和Session一起钝化到硬盘时调用 |

| sessionDidActivate(HttpSessionEvent se)   | 该类实例和Session一起活化到内存时调用 |

+ HttpSessionEvent对象代表事件对象,通过getSession()方法获取事件涉及的HttpSession对象。

什么是钝化活化

+ 在关闭服务器前或者到达了设定时间时,session进行序列化到磁盘,这种情况叫做session钝化

+ 在服务器启动后或者再次获取某个session,磁盘上的session进行反序列化到内存,这种情况叫做session活化

(3)请求域

> ServletRequestListener 监听ServletRequest对象的创建与销毁

| 方法名                                      | 作用                         |

| ------------------------------------------- | ---------------------------- |

| requestInitialized(ServletRequestEvent sre) | ServletRequest对象创建时调用 |

| requestDestroyed(ServletRequestEvent sre)   | ServletRequest对象销毁时调用 |

+ ServletRequestEvent对象代表从HttpServletRequest对象身上捕获到的事件,通过这个事件对象我们可以获取到触发事件的HttpServletRequest对象。另外还有一个方法可以获取到当前Web应用的ServletContext对象。

> ServletRequestAttributeListener 监听ServletRequest中属性的添加、移除和修改

| 方法名                                               | 作用                                 |

| ---------------------------------------------------- | ------------------------------------ |

| attributeAdded(ServletRequestAttributeEvent srae)    | 向ServletRequest中添加属性时调用     |

| attributeRemoved(ServletRequestAttributeEvent srae)  | 从ServletRequest中移除属性时调用     |

| attributeReplaced(ServletRequestAttributeEvent srae) | 当ServletRequest中的属性被修改时调用 |

+ ServletRequestAttributeEvent对象代表属性变化事件,它包含的方法如下:

| 方法名               | 作用                             |

| -------------------- | -------------------------------- |

| getName()            | 获取修改或添加的属性名           |

| getValue()           | 获取被修改或添加的属性值         |

| getServletRequest () | 获取触发事件的ServletRequest对象 |

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值