1.简介

Listener是Servlet的监听器,Servlet 监听器用于监听一些重要事件的发生,监听器对象在事情发生前、发生后可以做一些必要的处理。

JavaWeb里面的listener是通过观察者设计模式进行实现的。

观察者模式又叫发布订阅模式或者监听器模式。在该模式中有两个角色:观察者和被观察者(通常也叫做主题)。观察者在主题里面注册自己感兴趣的事件,当这个事件发生时,主题会通过回调接口的方式通知观察者。

举个生活中的例子:订阅报纸。任何一个家庭或个人都可以向报社订阅报纸。这里报社就是“主题”,家庭就是“观察者”。比如家庭需要订阅明天早晨的报纸,这个就是“事件”。到了第二天早晨,报纸生产出来了,这个就是“事件发生”。当事件发生时,送报员将报纸送到家庭的信箱里面,这里的信箱就是“回调接口”。

aaarticlea/png;base64,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" alt="" />

对于JavaWeb里面的监听器,Servlet规范定义了一些列的Listener接口类,通过接口类的方式将事件暴露给应用程序,应用程序如果想监听其感兴趣的事件,那么不必去直接注册对应的事件,而是编写自己的listener实现相应的接口类,并将自己的listener注册到servlet容器。当程序关心的事件发生时,servlet容器会通知listener,回调listener里面的方法。这里自定义的listener就是观察者,servlet容器就是主题。

aaarticlea/png;base64,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" alt="" />

2.分类

现在我们分析下,servlet规范为我们定义了哪些事件。更准确的说是定义了哪些监听接口。下面的介绍都是以servlet3.0规范为准。

servlet3.0为我们提供了8个监听器接口,按照它们的作用域来划分的话可以分为三类:

1.servlet上下文相关监听接口:

  • ServletContextListener
  • ServletContextAttributeListener

2.http session相关监听接口:

  • HttpSessionListener
  • HttpSessionActivationListener
  • HttpSessionAttributeListener
  • HttpSessionBindingListener

3.servlet request相关监听接口:

  • ServletRequestListener
  • ServletRequestAttributeListener

3.Java编写Listener实例

Listener编写分为两步:

  1. 编写自己的listener,实现特定的Listener接口
  2. 在web.xml里面注册自己的listener(也可以通过注解的方式,道理是一样的)

ListenerDemo.java(这里继承ServletContextListener接口):

public class ListenerDemo implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("----------ServletContextListener.contextInitialized-----------");
} @Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("----------ServletContextListener.contextDestroyed----------");
}
}

web.xml:

<listener>
<listener-class>com.xzh.ListenerDemo</listener-class>
</listener>

效果图:

注意:结果中可以看到listener比filter先执行。

4.源码分析

4.1 ServletContextListener

public interface ServletContextListener extends EventListener {
void contextInitialized(ServletContextEvent var1); void contextDestroyed(ServletContextEvent var1);
}

servlet上下文监听器接口,对应着两个事件:servlet上下文初始化事件和servlet上下文即将关闭事件。

当web应用初始化的时候,servlet容器会构造ServletContextEven实例,并回调contextInitialize方法。当servlet上下文即将关闭时,一般是关闭服务器之前,servlet容器会构造ServletContextEven实例,并回调contextDestroyed方法。这里需要注意的是,contextDestroyed方法的执行会在所有的servlet和filter执行完destroy方法之后。

4.2 ServletContextAttributeListener

public interface ServletContextAttributeListener extends EventListener {
void attributeAdded(ServletContextAttributeEvent var1); void attributeRemoved(ServletContextAttributeEvent var1); void attributeReplaced(ServletContextAttributeEvent var1);
}

当servlet上文属性发生增、删、改的时候,servlet容器构造ServletContextAttributeEvent事件对象,分别回调attributeAdded、attributeRemoved、attributeReplaced方法。

这里需要注意的是attributeReplaced方法,当属性的值被替换的时候回调。这个时候如果调用ServletContextAttributeEvent.getValue()方法返回的是替换之前的属性值。

4.3 HttpSessionListener

public interface HttpSessionListener extends EventListener {
void sessionCreated(HttpSessionEvent var1); void sessionDestroyed(HttpSessionEvent var1);
}

当session被创建和销毁的时候,servlet容器构造HttpSessionEvent事件对象,并回调sessionCreated和sessionDestroyed方法。

4.4 HttpSessionActivationListener

public interface HttpSessionActivationListener extends EventListener {
void sessionWillPassivate(HttpSessionEvent var1); void sessionDidActivate(HttpSessionEvent var1);
}

当session将要钝化或已被激活时,servlet容器构造HttpSessionEvent事件对象,回调sessionWillPassivate和sessionDidActivate方法。

这里解释下钝化和激活:钝化是指服务器内存不够了或者session的活动超时时间到了,把最近不活动的session序列化到磁盘。激活是指某个钝化的session又被访问了,从磁盘将session反序列化到内存。

这里可以看出要想钝化和激活,首先session得可序列化和反序列化。同时我们在编程过程中,session尽量用String、Integer等简单的对象,尽量不要用list、map等集合。3.5

4.5 HttpSessionAttributeListener

public interface HttpSessionAttributeListener extends EventListener {
void attributeAdded(HttpSessionBindingEvent var1); void attributeRemoved(HttpSessionBindingEvent var1); void attributeReplaced(HttpSessionBindingEvent var1);
}

当session属性发生增、删、改的时候,servlet容器构造HttpSessionBindingEvent事件对象,分别回调attributeAdded、attributeRemoved、attributeReplaced方法。

这里需要注意的是attributeReplaced方法,当属性的值被替换的时候回调。这个时候如果调用ServletContextAttributeEvent.getValue()方法返回的是替换之前的属性值。

当调用session的invalidate方法或者session失效时,也会回调attributeRemoved方法。

4.6 HttpSessionBindingListener

public interface HttpSessionBindingListener extends EventListener {
void valueBound(HttpSessionBindingEvent var1); void valueUnbound(HttpSessionBindingEvent var1);
}

这个监听器也是监听session的属性变化。当session属性发生增和删,也就是属性值绑定和属性值解绑的时候,servlet容器构造HttpSessionBindingEvent事件对象,分别回调valueBound、valueUnbound方法。

这么一看和HttpSessionAttributeListener没什么区别,其实不是这样。两者有个本质的区别就是事件触发的条件。

当session的属性有任何的变化,servlet容器都会通知HttpSessionAttributeListener。但是对于HttpSessionBindingListener,只有当绑定或解绑的属性值是监听器的实例时,servlet容器才会通知。

4.7 ServletRequestListener

public interface ServletRequestListener extends EventListener {
void requestDestroyed(ServletRequestEvent var1); void requestInitialized(ServletRequestEvent var1);
}

当请求初始化或者销毁时,即客户端请求进入web应用(进入servlet或者第一个filter)或web应用返回响应给客户端(退出servlet或者第一个filter)。servlet容器构造ServletRequestEvent实例,回调requestInitialized和requestDestroyed方法。

4.8 ServletRequestAttributeListener

public interface ServletRequestAttributeListener extends EventListener {
void attributeAdded(ServletRequestAttributeEvent var1); void attributeRemoved(ServletRequestAttributeEvent var1); void attributeReplaced(ServletRequestAttributeEvent var1);
}

当请求的属性发生增、删、改的时候,servlet容器构造ServletRequestAttributeEvent事件对象,分别回调attributeAdded、attributeRemoved、attributeReplaced方法。

这里需要注意的是attributeReplaced方法,当属性的值被替换的时候回调。这个时候如果调用ServletRequestAttributeEvent.getValue()方法返回的是替换之前的属性值。

参考:

JavaWeb——Listener

java常用的Listener分类

JavaWeb—监听器Listener的更多相关文章

  1. javaweb学习总结(四十七)——监听器(Listener)在开发中的应用

    监听器在JavaWeb开发中用得比较多,下面说一下监听器(Listener)在开发中的常见应用 一.统计当前在线人数 在JavaWeb应用开发中,有时候我们需要统计当前在线的用户数,此时就可以使用监听 ...

  2. javaWeb学习总结(11)- 监听器(Listener)在开发中的应用

    监听器在JavaWeb开发中用得比较多,下面说一下监听器(Listener)在开发中的常见应用 一.统计当前在线人数 在JavaWeb应用开发中,有时候我们需要统计当前在线的用户数,此时就可以使用监听 ...

  3. javaWeb学习总结(11)- 监听器(Listener)学习

    一.监听器介绍 1.1.监听器的概念 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其 实就是一个实现特定接口的普 ...

  4. JavaWeb学习 (二十七)————监听器(Listener)在开发中的应用

    监听器在JavaWeb开发中用得比较多,下面说一下监听器(Listener)在开发中的常见应用 一.统计当前在线人数 在JavaWeb应用开发中,有时候我们需要统计当前在线的用户数,此时就可以使用监听 ...

  5. JavaWeb学习笔记(二十一)—— 监听器Listener

    一.监听器概述 JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域对 ...

  6. Javaweb基础--->监听器listener(转发)

    JavaWeb中的监听器 1.基本概念 JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 Servl ...

  7. 深入分析JavaWeb Item38 -- 监听器(Listener)高速学习

    一.监听器介绍 1.1.监听器的概念 监听器是一个专门用于对其它对象身上发生的事件或状态改变进行监听和对应处理的对象,当被监视的对象发生情况时,马上採取对应的行动.监听器事实上就是一个实现特定接口的普 ...

  8. 深入分析JavaWeb Item39 -- 监听器(Listener)学习进阶

    一.监听域对象中属性的变更的监听器 域对象中属性的变更的事件监听器就是用来监听 ServletContext, HttpSession, HttpServletRequest 这三个对象中的属性变更信 ...

  9. JavaWeb监听器详解

    1 JavaWeb监听器概述 在JavaWeb被监听的事件源为:ServletContext.HttpSession.ServletRequest,即三大域对象.有监听域对象"创建" ...

随机推荐

  1. python 在Windows中描述路径时出现的问题

    问题的根本:windows读取文件可以用\,但在字符串里面\被作为转义字符使用,   python在描述路径时有两种方式: 'd:\\a.txt',转义的方式 r'd:\a.txt',声明字符串不需要 ...

  2. SpringCloud系列十:使用Feign实现声明式REST调用

    1. 回顾 前文的示例中是使用RestTemplate实现REST API调用的,代码大致如下: @GetMapping("/user/{id}") public User fin ...

  3. JMX简单样例

    一:创建maven项目,在pom.xml里面增加例如以下依赖 <dependency> <groupId>com.sun.jdmk</groupId> <ar ...

  4. 521. Longest Uncommon Subsequence I【easy】

    521. Longest Uncommon Subsequence I[easy] Given a group of two strings, you need to find the longest ...

  5. >/dev/null 2>&1的作用

    1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"  2 表示stderr标准错误  &am ...

  6. java - day08 - ArrayFounderTrans

    package day07_addition; import java.util.Arrays; import java.util.Random; //数组 伸缩.增删.位移.复制 public cl ...

  7. mac 火狐 下载 任何文件都是失败

    今天在从邮件中下载附件,怎么点击下载 浏览器上都是失败 最后突然想到,我改过火狐的下载路径,改到根目录下了,根目录下应该是没有权限保存文件的 后把下载路径改成 “下载” 就可以正常下载了

  8. deepin linux下eclipse c/c++ 调试开源代码

    1.deepin linux 下使用eclipse c/c++ 调试2. 编译选项,-g3 -O0,-g3表示输出调试信息,-O0不优化代码(第一个字母o的大写,第二个是数字0) 3.必备环境: gd ...

  9. tomcat的bin目录中startup.bat/tomcat.6.exe/tomcat6w.exe区别

    一.tomcat6.exe 与 startup.bat的区别 1.两者都可以用于启动Tomcat tomcat6.exe则是必须将tomcat注册Windows服务之后才可以用于启动tomcat服务; ...

  10. Easyui Datagrid扩展fixRownumber方法

    首先,从datagrid生成的代码,我们可以发现,在rowNumber上都有特定的class标记,datagrid-cell-rownumber,datagrid-header-rownumber. ...