一、监听器(Listener)概述

  1、概念

  JavaWeb中的监听器是Servlet规范中定义的一种特殊类,它用于监听web应用程序中的ServletContext, HttpSession和 ServletRequest等域对象的创建与销毁事件,以及监听这些域对象中的属性发生修改的事件,并自动根据不同情况,在后台调用相应的处理程序。

  通过监听器,可以自动激发一些操作,比如监听在线人数,当增加一个HttpSession时就激发 sessionCreated(HttpSessionEvent)方法,这样就可以给在线人数加1。

  2、监听器类型

  在Servlet规范中定义了多种类型的监听器,它们用于监听的事件源分别为 ServletContext, HttpSession 和 ServletRequest 这三个域对象。

  Servlet规范针对这三个对象上的操作,又把这多种类型的监听器划分为三种类型。

     1. 监听三个域对象创建和销毁的事件监听器

     2. 监听域对象中属性的增加和删除的事件监听器

     3. 监听绑定到 HttpSession 域中的某个对象的状态的事件监听器

  

二、监听三个域对象创建和销毁的事件监听器

  1.ServletContext域对象

  编写一个ServletContextListener_test类,实现ServletContextListener接口,监听ServletContext对象的创建和销毁

 package com.yx.servlet.listener;

 import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener; /**
* Application Lifecycle Listener implementation class ServletContextListener_test
* @Description:ServletContextListener_test实现了ServletContextListener接口,
* 因此可以对ServletContext对象的创建和销毁两个动作进行监听
*/
@WebListener
public class ServletContextListener_test implements ServletContextListener {
/**
* Default constructor.
*/
public ServletContextListener_test() { } /**
* @see ServletContextListener#contextInitialized(ServletContextEvent)
*/
public void contextInitialized(ServletContextEvent sce) {
System.out.println("ServletContext对象创建");
}
/**
* @see ServletContextListener#contextDestroyed(ServletContextEvent)
*/
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("ServletContext对象销毁");
}
}

  ServletContextEvent的主要方法:ServletContext getServletContext():取得当前的ServletContext对象  

  在web.xml中注册监听器:要想监听事件源,那么必须将监听器注册到事件源上才能够实现对事件源的行为动作进行监听。

<listener>
<listener-class>com.yx.servlet.listener.ServletContextListener_test</listener-class>
</listener>

  2、HttpSession域对象 

 package com.yx.servlet.listener;

 import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener; /**
* Application Lifecycle Listener implementation class HttpSeeionListener_test
*
* HttpSession的销毁时机需要在web.xml中进行配置
*/
@WebListener
public class HttpSeeionListener_test implements HttpSessionListener { /**
* Default constructor.
*/
public HttpSeeionListener_test() {
// TODO Auto-generated constructor stub
} /**
* @see HttpSessionListener#sessionCreated(HttpSessionEvent)
*/
public void sessionCreated(HttpSessionEvent hse) {
System.out.println(hse.getSession()+"创建了");
}
/**
* @see HttpSessionListener#sessionDestroyed(HttpSessionEvent)
*/
public void sessionDestroyed(HttpSessionEvent hse) {
System.out.println("session销毁了");
} }

  HttpSessionEvent的主要方法:HttpSession getSession()

  在web.xml中注册监听器:

  <listener>
<listener-class>com.yx.servlet.listener.HttpSeeionListener_test</listener-class>
</listener>
<!--filter,listener,servlet,servlet-mapping等要在session-config之前配置-->
<!--配置HttpSession的销毁时机,在1分钟后销毁-->
<session-config>
<session-timeout>1</session-timeout>
</session-config>

  3.  ServletRequest域对象 

 public void requestInitialized(ServletRequestEvent sre)  {
System.out.println(sre.getServletRequest()+"创建");
}
/**
* @see ServletRequestListener#requestDestroyed(ServletRequestEvent)
*/
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println(sre.getServletRequest()+"销毁");
}

  ServletRequestEvent实例中的方法:getServletRequest():获取ServletRequest对象;

getServletContext():获取ServletContext对象。 

  <listener>
<listener-class>com.yx.servlet.listener.ServletRequestListener_test</listener-class>
</listener>

三、监听域对象中属性的变更的监听器

  1.ServletContextAttributeListener

  用于监听Web应用属性改变的事件,包括增加、删除、修改属性。监听器类需要实现ServletContextAttributeListener接口。

  ServletContextAttributeListener接口的主要方法:

  (1)void attributeAdded(ServletContextAttributeEvent se):若有对象加入Application的范围,通知正在收听的对象。

  (2)void attributeRemoved(ServletContextAttributeEvent se):若有对象从Application范围移除,通知正在收听的对象。

  (3)void attributeReplaced(ServletContextAttributeEvent se):若在Application的范围中,有对象取代另一个对象时,通知正在收听的对象

  ServletContextAttributeEvent中的主要方法:

    getName():返回属性名称

    getValue():返回属性的值

  2.HttpSessionAttributeListener:监听HttpSession中属性的操作

  该接口的主要方法:

  (1)void attributeAdded(HttpSessionBindingEvent se):监听Http会话中的属性添加

  (2)void attributeRemoved(HttpSessionBindingEvent se):监听Http会话中的属性移除

  (3)void attributeReplaced(HttpSessionBindingEvent se):监听Http会话中的属性更改操作

  3. ServletRequestAttributeListener:用于监听Web应用属性改变的事件,包括增加属性、删除属性、修改属性
  接口方法:
  (1)void attributeAdded(ServletRequestAttributeEvent e):向Request对象添加新属性
  (2)void attributeRemoved(ServletRequestAttributeEvent e):从request对象中删除属性
  (3)void attributeReplaced(ServletRequestAttributeEvent e):替换对象中现有属性值
  ServletRequestAttributeEvent中的主要方法:
    getName():返回Request增加、删除、或替换的属性名称
    getValue():返回Request增加、删除、或替换的属性的值
  注:以上均需要在web.xml中进行配置
四、监听绑定到 HttpSession 域中的某个对象的状态的事件监听器
  1.HttpSessionBindingListener接口

  注意:HttpSessionBindingListener接口是唯一不需要再web.xml中设定的Listener

  当我们的类实现了HttpSessionBindingListener接口后,只要对象加入Session范围(即调用HttpSession对象的setAttribute方法的时候)或从Session范围中移出

(即调用HttpSession对象的removeAttribute方法的时候或SessionTime out的时候)时,可以感知自己何时被绑/解绑HttpSession域中,容器分别会自动调用下列两个方法:

  void valueBound(HttpSessionBindingEvent event)

  void valueUnbound(HttpSessionBindingEvent event)

  2.HttpSessionActivationListener接口:监听Http会话的active和passivate状态。接口中定义的回调方法有:
  
          session对象被保存到磁盘时,激发 sessionWillPassivate(HttpSessionEvent)
          session对象被调入内存时,激发 sessionDidActivate(HttpSessionEvent)
  
   Activate与Passivate是用于置换session对象的动作,当Web服务器因为资源利用或负载平衡等原因要将内存中的 session对象暂时储存至硬盘或其它储存器时(通过对象序列化),所作的动作称之为Passivate,而硬盘或储存器上的session对象重新加 载到JVM中时所采的动作称之为Activate。sessionDidActivate()方法与 sessionWillPassivate()方法分别于Activeate后与Passivate前被调用。

  参考博文:

  (1)http://www.cnblogs.com/xdp-gacl/p/3961929.html;http://www.cnblogs.com/xdp-gacl/p/3969249.html

  (2)http://www.cnblogs.com/ymf123/p/5017622.html

  (3)http://blog.csdn.net/rongxiang111/article/details/53487381

  (4)http://blog.csdn.net/u011120983/article/details/50468407

  (5)http://blog.csdn.net/xxssyyyyssxx/article/details/50007833

Servlet之监听器(Listener)的更多相关文章

  1. Servlet的监听器Listener

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

  2. servlet监听器Listener(理论+例子)

    Listener采用了观察者模式(24种模式之一),Listener是servlet的监听器,他可以监听客户端的请求.服务器端的操作等, 通过监听器,可以自动激发一些操作.比如:监听在线用户数量 当增 ...

  3. java之Servlet监听器Listener

    常用应用场景:单点登录.统计在线人数 一.简介 (一)概述 1.Listener 用于监听 java web程序中的事件,例如创建.修改.删除Session.request.context等,并触发响 ...

  4. Servlet 监听器Listener详解

    转自:http://blog.csdn.net/u012228718/article/details/41730799 一.简介 (一)概述 1.Listener 用于监听 Javaweb程序中的事件 ...

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

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

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

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

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

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

  8. [09] 监听器 Listener

    1.事件 1.1 事件的概念 在Servlet中有一个概念叫做监听,顾名思义,就是监听某种事件是否发生.就如你是一家娱乐媒体公司的老板,你派出狗仔队去跟着某些明星,比如你想了解他们的绯闻,或者活动进展 ...

  9. Servlet的监听器

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

  10. 过滤器Filter与监听器Listener

    过滤器Filter 过滤器也是一种servlet   它也可以对用户的请求进行处理  , 但是他所做的处理,只是一些轻量级的处理.Fileter就好像jsp页面与servlet之间的一道关卡,如果这个 ...

随机推荐

  1. 【亲测】Java 接口自动化步骤

    GET请求(Maven) 一. src/main/java 1.[地址--HOST]创建并设置配置文件(后缀名.properties的文本文件):存放接口请求的host地址 2.[地址]TestBas ...

  2. 初见Hadoop—- 搭建MyEclipse 访问HDFS 上的文件

    因公司项目需要,开始接触大数据分析这块知识.网上关于大数据这块的知识还是比较多的.学习了一个礼拜了,再次记录一下,自己的学习过程,希望可以帮助后学者少走一些弯路. 服务端的配置,由于公司项目经理已经配 ...

  3. ubuntu安装python版本的opencv

    安装命令: pip install opencv-python

  4. LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍历建立二叉树 C++

    Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that ...

  5. @Data的注解使用以及在IDEA上安装

    平时在开发过程中创建实体类的时候就经常的操作是:先写成员变量,然后再提供getXxx().setXxx()方法,然后看需要再提供toString等方法.这样一来不仅会发现每写一个实体类的话就会有很多相 ...

  6. easyUI 学习

    )省份-城市-区域三级联动[struts2 + ajax +非数据库版] (1)省份-城市-区域,基于jQuery的AJAX三级联动,用Struts2整合AJAX[非数据库版] $.ajax( { t ...

  7. html页面转jsp后 乱码问题。

    在jsp文件中的html显示乱码是因为服务端和客户端的编码不一致导致的.如果Java和JSP编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码.解决办法:1.未指定使用字符集 ...

  8. 查询Oracle版本

    服务器端 Oracle: 1)select* from v$version; 2)select * from product_component_version; 3)set serveroutput ...

  9. 面试必备:ArrayList源码解析(JDK8)

    面试必备:ArrayList源码解析(JDK8) https://blog.csdn.net/zxt0601/article/details/77281231 概述很久没有写博客了,准确的说17年以来 ...

  10. 浅谈Tomcat和Servlet

    本文浅谈下对Tomcat和Servlet总体的理解,初学时有用过一段时间,但当时疲于应对如何xml配置和使用,对他们的理解就像是一个黑匣子.现在回顾一下帮助自己加深网络的理解.开始还是先推荐我看的文章 ...