一、监听器(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. 从RDS中获取binlog

    由于使用RDS,但是没有开启日志,所以需要分析时,发现根本没有日志可以下载. 但是RDS中是存在binlog的,那么直接在线获取 首先在一台能够连接上RDS的数据中安装对应版本的mysql客户端. 到 ...

  2. 爬虫之requests

    一.基本用法 1.GET请求 ①r=requests.get(url) --返回Response对象 def get(url, params=None, **kwargs): params={... ...

  3. Burp Suite设置代理

    一.确认代理信息 打开Burp Suite,查看proxy->options,看到Interface一栏为127.0.0.1:8080. 二.在Firefox中设置代理服务器 可以下载工具Fox ...

  4. css实现布局

    1.两栏布局 两栏布局一般就是一栏定宽一栏自适应(也就是流动).分的细的话还有左栏定宽右栏自适应.右栏定宽左栏自适应. 举个栗子:一栏定宽200px,一栏自适应. <head> <m ...

  5. Java学习随笔(1)--groovy爬虫

    package com.fan import com.fission.source.httpclient.ApiLibraryimport com.fission.source.httpclient. ...

  6. ORM项目中小知识点积累

    申明:一下内容均建立在零基础小白的角度上,大佬们求放过~ 1.如何通过类建立外键关联 2.模板语言固定搭配 3.浏览器报错处理 4.后台取值方式 5.外键管理修改相关操作 6.两种(给后台偷偷传递消息 ...

  7. 为什么打开fiddler电脑就不能上网,关了就能正常打开了呢?

    因为打开fiddler是它修改浏览器走代理服务器,关掉fiddler之后,代理服务器已经关闭了.但是,但是浏览器的代理模式还没改回来,就是说浏览器还要通过代理访问站点,然而代理服务器已经没有了.打开浏 ...

  8. Oracle使用学习笔记(一)

    一.实体关系模型的三个关键因素 实体:具有相同特征和属性的显示世界事务的抽象,对应面向对象编程中的类,动物就是一个实体 属性:实体具有的特征,如类的属性,动物的名字,体长等 关系:一对一,一对多,多对 ...

  9. spring、mybatis事务配置和控制

    springmybatis.xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi= ...

  10. Dev破解组件。

    将UI项目中的properties的license.lcx内容清空