一、监听器(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. Android View转为图片保存为本地文件,异步监听回调操作结果;

    把手机上的一个View或ViewGroup转为Bitmap,再把Bitmap保存为.png格式的图片: 由于View转Bitmap.和Bitmap转图片都是耗时操作,(生成一个1M的图片大约500ms ...

  2. ng 1.2 ng-bind-html 用法

    使用ng-bind-html渲染html字符串时需要在控制器外注册$sec 过滤器 //过滤器渲染html字符串 app.filter('to_trusted',['$sce',function($s ...

  3. java学习--自定义类的实例的大小比较和排序

    我们知道Object类有一个equals方法,用于比较两个对象是否相等 我们只要在自定义类中重写了equals方法(若不重写就是比较两个实例的地址,相当于==)就可以用来比较该类的两个实例是否相等 问 ...

  4. Android 获取View在屏幕中的位置【转】

    Android 获取View在屏幕中的位置 https://blog.csdn.net/lonely_fireworks/article/details/7849643

  5. windows集群简单介绍

    windows集群简单介绍仔细看过以前网友发表的一些文章,总觉得对windows集群没有详细介绍,我也是借花献佛,引用了一些技术性文档.目前应用最为广泛的集群计算技术可以分为三大类:高可用性集群技术. ...

  6. Arthas的基础学习

    下载与安装 wget https://alibaba.github.io/arthas/arthas-boot.jar java -jar arthas-boot.jar 启动 查看启动的帮助信息: ...

  7. MFC新建工程中目录包含中文,资源文件打开失败

    ※尽量不适用中文,各种未知错误,嘿嘿 此方法临时解决问题,可以使程序运行,后续是否还有错误是未知数 需要修改3处位置: 1.资源文件中.rc 右键,点击“查看代码”,找到带中文的资源ID,把中文修改掉 ...

  8. Mysql表结构导出excel(含数据类型、字段备注注释)

    SELECT   "列名",   "数据类型",     "字段类型",   "长度",  "是否为空&quo ...

  9. form表单中$_FILES数组的使用

    <form enctype="multipart/form-data" action="upload.php" method="post&quo ...

  10. kafka创建会话,报Error while executing topic command : Replication factor: 1 larger than available brokers: 0.

     bin/kafka-topics.sh --create --zookeeper es1:2181 --replication-factor 1 --partitions 1 --topic top ...