监听器的使用场景:

  ①:统计在线人数   ②:实现单一登录【一个账号只能在一台机器上登录】

Servlet中的8大监听器:

1.         ServletContextListener

[接口方法] contextInitialized()与contextDestroyed()

[接收事件] ServletContextEvent

[触发场景] 在Container加载Web应用程序时(例如启动Container之后),会调用contextInitialized(),而当容器移除Web应用程序时,会调用contextDestroy()方法。

2.         ServletContextAttributeListener

[接口方法] attributeAdded()、attributeReplaced()、attributeRemoved()

[接收事件] ServletContextAttributeEvent

[触发场景] 若有对象加入为application(ServletContext)对象的属性,则会调用attributeAdded(),同理在置换和移除属性时,会分别调用attributeReplaced()、attributeRemoved()。

3.         HttpSessionListener

[接口方法] sessionCreated()与sessionDestroyed()

[接收事件] HttpSessionEvent

[触发场景] 在session(HttpSession)对象建立或者消亡时,会分别调用这两个方法。

4.         HttpSessionAttributeListener

[接口方法] attributeAdded()、attributeReplaced()、attributeRemoved()

[接收事件] HttpSessionBindingEvent

[触发场景] 若有对象加入为session(HttpSession)对象的属性,则会调用attributeAdded(),同理在置换和移除属性时,会分别调用attributeReplaced()、attributeRemoved()。

5.         ServletRequestListener

[接口方法] requestInitialized()与requestDestroyed()

[接收事件] RequestEvent

[触发场景] 在request(HttpServletRequest)对象建立或者消亡时,会分别调用这两个方法。

6.         ServletRequestAttributeListener

[接口方法] attributeAdded()、attributeReplaced()、attributeRemoved()

[接收事件] HttpSessionBindingEvent

[触发场景] 若有对象加入为request(HttpServletRequest)对象的属性,则会调用attributeAdded(),同理在置换和移除属性时,会分别调用attributeReplaced()、attributeRemoved()。

7.         HttpSessionBindingListener

[接口方法] valueBound()与valueUnbound()

[接收事件] HttpSessionBindingEvent

[触发场景] 实现HttpSessionBindingListener接口的类别,其实例如果被加入到session(HttpSession)对象的属性中,则会调用valueBound(),如果从session(HttpSession)对象的属性中移除,则会调用valueUnbound(),实现HttpSessionBindingListener接口的类别不需要在web.xml中设定。

8.         HttpSessionActivationListener

[接口方法] sessionDidActivate()与sessionWillPassivate()

[接收事件] HttpSessionEvent

[触发场景] Activate与Passivate是用于置换对象的动作,当session对象为了资源利用或者负载均衡等原因而必须暂时储存至硬盘或其他存储器时(通过对象序列化),所作的动作称为Passivate,而硬盘或者储存器上的session对象重新加载JVM时所采的动作称之为Activate,所以sessionDidActivate()与sessionWillPassivate()分别于Activate后和Passivate前调用。

除了HttpSessionBindingListener和HttpSessionActivationListener外,必须在web.xml中向容器注册,容器才会在对应的事件发生时调用对应的类别。

代码演示:

TestServlet.java

 public class TestServlet extends HttpServlet {

     /**
*
*/
private static final long serialVersionUID = 1L; @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("执行get请求");
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("执行post请求");
}
}

TestListener.java

 public class TestListener implements ServletRequestListener{

     @Override
public void requestDestroyed(ServletRequestEvent servletRequestEvent) {
System.out.println("request销毁");
} @Override
public void requestInitialized(ServletRequestEvent servletRequestEvent) {
System.out.println("request初始化");
}
}

web.xml

 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>ListenerDemo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list> <servlet>
<servlet-name>testServlet</servlet-name>
<servlet-class>cn.woo.servlet.TestServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>testServlet</servlet-name>
<url-pattern>/servlet/testServlet</url-pattern>
</servlet-mapping> <!-- 配置Listener:监听request的初始化和销毁 -->
<listener>
<listener-class>cn.woo.listener.TestListener</listener-class>
</listener> </web-app>

通过:http://localhost:8080/ListenerDemo/servlet/testServlet 访问Servlet

控制台打印:

Servlet高级部分Listener的更多相关文章

  1. Servlet的监听器Listener

    Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是 随web应用的启动而启动,只初始化一次,随web ...

  2. servlet 高级知识之Listener

    Listener,顾名思义,监听器.它可以监听客户端的请求.服务端的操作等. 通过监听器,可以自动激发一些操作,比如监听在线的用户的数量.当增加一个HttpSession时,就激发sessionCre ...

  3. [web]Servlet中的Listener和Filter

    建议先看看 ——> Servlet工作原理 一.Listener 在Tomcat服务中,Listener的设计是基于观察者模式的,目前在Servlet中提供6中两类事件的观察者接口,它们分别是: ...

  4. Servlet监听器(Listener)实例

    以下内容是翻译自http://www.journaldev.com/1945/servletcontextlistener-servlet-listener-example: 说明:web.xml的加 ...

  5. <<< web里面Servlet高级应用的基础介绍

    Servlet中的页面跳转?两种方式,实现跳转:内部跳转(请求转发).外部跳转(重定向)内部跳转(请求转发)特点:在服务器内部完成页面之间的跳转:请求只有一次:浏览器地址不会改变.request.ge ...

  6. Servlet高级

    1. 获取初始化参数 在web.xml中配置Servlet时,可以配置一些初始化参数.而在Servlet中可以通过ServletConfig接口提供的方法来取得这些参数. index.jsp < ...

  7. Servlet高级应用---Servlet与缓存

    一]设置缓存文件的有效日期        重点方法:            HttpServletRequest类:                    1>String getRequest ...

  8. servlet 高级知识之Filter

    Filter叫做拦截器, 对目标资源拦截,拦截HTTP请求和HTTP响应,本质是对url进行拦截. 与serlvet不同的是, Filter的初始化是随着服务器启动而启动. 在Filter接口中定义了 ...

  9. Servlet高级部分Filter(过滤器)

    一:Filter称之为"过滤器",用在Servlet外,对request和response进行修改.它是AOP(面向切面编程思想的一种体现),Filter中有一个FilterCha ...

随机推荐

  1. Luogu 4556 雨天的尾巴

    主席树+线段树合并. 首先我们想一想如果只有一个结点的话,我们弄一个权值线段树就可以随便维护了. 那么我们可以运用差分的思想,把一个询问拆成四个操作,对于一个询问$(x, y, v)$,我们在$x$的 ...

  2. 1. csrf 简介

    浅谈CSRF CSRF是什么? (Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 年曾被列为互联网 大安全隐患之一,也被称为“One Click A ...

  3. vim加亮和自动缩进

    修改/etc/vimrc 添加 set cindent syntax on

  4. Python中配置文件解析模块-ConfigParser

    Python中有ConfigParser类,可以很方便的从配置文件中读取数据(如DB的配置,路径的配置).配置文件的格式是: []包含的叫section, section 下有option=value ...

  5. [Django笔记] uwsgi + nginx 配置

    django 和 nginx 通过 uwsgi 来处理请求,类似于 nginx + php-fpm + php 安装nginx 略 安装配置uwsgi pip install uwsgi 回想php- ...

  6. 系统:Centos 7.2 内核3.10.0-327.el7.x86_64 # 内核需要高于2.6.32

    系统:Centos 7.2 内核3.10.0-327.el7.x86_64 # 内核需要高于2.6.32 Drbd : 192.168.8.111:node1/dev/drdb0 /mydeta 19 ...

  7. angularJs中对时间戳的处理

    一. ng表达式 <!-- 表达式中使用 --> {{ dt1 | date:'yyyy-MM-dd HH:mm:ss' }} 二. 控制器中使用 //controller必须注入 $fi ...

  8. 多实例:MySQL系列之二

    MySQL的多实例配置 ​ 在一台物理机中需要多个测试环境,那么就需要用到了搭建数据库的多个实例,多个实例的意思就是运行多份程序,实例与实例之间没有影响.要注意监听的端口需要不同. 环境:CentOS ...

  9. 入侵检测系统 - ossec

    http://www.cnblogs.com/zlslch/p/8512757.html

  10. Nginx停止服务和各种命令

    1.停止Nginx服务的四种方法 从容停止服务这种方法较stop相比就比较温和一些了,需要进程完成当前工作后再停止. nginx -s quit 立即停止服务这种方法比较强硬,无论进程是否在工作,都直 ...