【Listener】java EE web三大核心之-listener监听器

1、什么是监听器

监听器(listener)是基于servlet容器的普通java程序,专用于监听另外一个java对象的方法调用或属性变更,被监听对象发生了相应事件后,监听器的某个方法就会立即执行。

监听器的相关概念:

  • 事件:某个对象的方法被调用、属性改变、状态改变等。

  • 事件源:被监听(观察)的对象( 例如:request、session、servletContext)。

  • 监听器:用于监听(观察)事件源对象 ,事件源对象状态的变化都会触发监听器对象中某些方法的立即执行。

  • 注册监听器:将监听器与事件源进行绑定。

    警察监视一个嫌疑人以求人赃俱获的场景下,嫌疑人就是事件源,警察就是监听器,嫌疑人与赃物同时出现就是一个事件,一旦发生该事件,警察就立即收网。警长安排英雄警察监视嫌疑人就是完成监听器的注册。

2、监听器的分类

Servlet-api中定义了 8 个监听器接口,用于监听 ServletContext、HttpSession 和 ServletRequest 对象的生命周期和属性变化事件,正好是Servlet中的三大作用域。

监听器按监听事件划分,可以分为3类:

  1. 监听对象创建和销毁的监听器
  2. 监听对象中属性变更的监听器
  3. 监听 HttpSession 中的对象状态改变的监听器

2.1 监听对象的创建与销毁的监听器

事件源监听器监听器描述创建和销毁方法调用时机
ServletContextServletContextListener用于监听 ServletContext 对象的创建与销毁过程void contextInitialized (ServletContextEvent sce)服务器启动时,为每一个项目创建一个上下文,创建上下文之前,触发事件
void contextDestroyed (ServletContextEvent sce)项目被移除或者服务器关闭时将会销毁上下文之后,触发事件
HttpSessionHttpSessionListener用于监听 HttpSession 对象的创建和销毁过程void sessionCreated (HttpSessionEvent se)项目中第一次场景session时即request.getSession()之前
void sessionDestroyed (HttpSessionEvent se)服务器非正常关闭、session超时、手动销毁之后触发事件
ServletRequestServletRequestListener用于监听 ServletRequest 对象的创建和销毁过程void requestInitialized (ServletRequestEvent sre)请求进入之前触发
void requestDestroyed (ServletRequestEvent sre)请求生成相应之后触发

2.2 监听属性变化的监听器

事件源监听器监听器描述方法调用时机
ServletContextServletContextAttributeListener用于监听 ServletContext 对象的属性新增、移除和替换public void attributeAdded (ServletContextAttributeEvent scae)当 ServletContext 对象中新增一个属性时
public void attributeRemoved (ServletContextAttributeEvent scae)当删除 ServletContext 对象中的一个属性时
public void attributeReplaced (ServletContextAttributeEvent scae)当 ServletContext 对象中的某个属性被替换时
HttpSessionHttpSessionAttributeListener用于监听 HttpSession 对象的属性新增、移除和替换public void attributeAdded (HttpSessionBindingEvent hsbe)当 HttpSession 对象中新增一个属性时
public void attributeRemoved (HttpSessionBindingEvent hsbe)当删除 HttpSession 对象中的一个属性时
public void attributeReplaced (HttpSessionBindingEvent hsbe)当 HttpSession 对象中的某个属性被替换时
HttpServletRequestServletRequestAttributeListener用于监听 HttpServletRequest 对象的属性新增、移除和替换public void attributeAdded (ServletRequestAttributeEvent srae)当 HttpServletRequest 对象中新增一个属性时
public void attributeRemoved (ServletRequestAttributeEvent srae)当删除 HttpServletRequest 对象中的一个属性时
public void attributeReplaced (ServletRequestAttributeEvent srae)当 HttpServletRequest 对象中的某个属性被替换时

2.3 监听Session中对象属性状态变化的监听器

事件源监听器监听器描述方法调用时机
HttpSessionHttpSessionBindingListener用于监听 JavaBean 对象绑定到 HttpSession 对象和从 HttpSession 对象解绑的事件void valueBound (HttpSessionBindingEvent event)当对象被绑定(添加)到 HttpSession 对象中时
void valueUnbound (HttpSessionBindingEvent event)当对象从 HttpSession 对象中解除绑定(移除)时
HttpSessionActivationListener用于监听 HttpSession 中对象活化和钝化的过程void sessionWillPassivate (HttpSessionBindingEvent event)当绑定到 HttpSession 对象中的对象将要随 HttpSession 对象被钝化之前
void sessionDidActive (HttpSessionBindingEvent event)当绑定到 HttpSession 对象中的对象将要随 HttpSession 对象被活化之后

3、自定义监听器示例,通过继承ServletRequestListener接口实现Request请求域的监听:

@WebListener
public class MyServletRequestListener implements ServletRequestListener {
    @Override
    public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
        ServletRequest servletRequest = servletRequestEvent.getServletRequest();
        HttpServletRequest httpServletRequest=(HttpServletRequest)servletRequest;
        System.out.println("request 级作用域监听事件销毁:"+ httpServletRequest.getRequestURL());
    }

    @Override
    public void requestInitialized(ServletRequestEvent servletRequestEvent) {
        ServletRequest servletRequest = servletRequestEvent.getServletRequest();
        HttpServletRequest httpServletRequest=(HttpServletRequest)servletRequest;
        System.out.println("request 级作用域监听事件初始化:"+httpServletRequest.getRequestURI());
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值