Servlet 认识监听器Listener

一、监听器简介

简介:Servlet监听器是Web应用程序事件模型的一部分,Servlet监听器用于监听一些Web应用中重要事件的发生,监听器对象可以在事情发生前、发生后,Servlet容器就会产生相应的事件,Servlet监听器用来处理这些事件。

监听器接口:
Servlet API中定义了8个监听器,根据监听对象的类型和范围可以分为3类:
1、ServletContext事件监听器(对于context上下文)
2、HTTPSession事件监听器(对于session会话)
3、ServletRequest事件监听器(对于request请求)

二、监听器的各种接口

(1)ServletRequestListener 接口
主要监听request内置对象的创建和销毁事件。
当request请求准备到达Web应用的第一个Servlet程序或过滤器时,request内置对象创建,触发了request内置对象创建事件。当request内置对象超出作用范围而失效时,触发request对象销毁事件。接口中定义了两个事件处理方法,分别是
requestlnitialized()requestDestroyed()

public void requestInitialized (ServletRequestEvent sre) :当产生的request准备进入Web应用作用范围事件时,侦听此事件的侦听器被激活,此方法被执行。

Public void requestDestroyed (ServletRequestEvent sre) :当产生的request准备超出Web应用作用范围事件时,侦听此事件的侦听器被激活,此方法被执行。

(2)ServletRequestAttributeListener 接口
主要侦听request属性的变化,包括添加新的属性、删除一个已有的属性、修改一个已有的属性值事件。

接口定义了3个事件处理方法,分别是attributeAdded()attributeRemoved()attributeReplaced()

attributeAdded (ServletRequestAttributeEvent srae):当上下文中添加了新的request属性事件时,监听器被激活,这个方法被执行。例如JSP页面使用request.setAttribute ("userName","Tom")会激活此方法。

void attributeRemoved (ServletRequestAttributeEvent srae) :当删除了一个已有的request属性时,监听器被激活,这个方法被执行。例如JSP页面使用request.removeAttribute ("userName")会激活此方法。

void attributeReplaced (ServletRequestAttributeEvent srae):当删除了一个已有的request属性时,监听器被激活,这个方法被执行。例如JSP页面使用		request.removeAttribute ("userName")会激活此方法。

(3)ServletContextListener接口
在Web应用程序启动时需要执行一些初始化任务,可以编写实现ServletContextListener接口的监听器类。

在ServletContextListener接口中定义了两个事件处理方法,分别是contextInitialize()contextDestroyed()

public void contextInitialized (ServletcontextEvent sce) :在Web应用程序初始化阶段,Servlet容器调用ServletContextListener对象的该方法,通知侦听器ServletContext对象进入初始化阶段。该方法在Web应用程序中的所有过滤器或Servlet初始化之前,应该通知所有ServletContextListener关于上下文初始化的信息。

public void contextDestroyed (ServletContextEvent sce):在Web应用的结束阶段,Servlet容器会调用ServletContextListener对象的本方法,通知侦听器ServletContext对象进入销毁阶段。在通知所有ServletContextListener上下文销毁之前,所有Servlet和过滤器都已销毁。

(4)ServletContextAttributeListener 接口

ServletContext的属性是由Web应用程序中所有的Servlet共享的。为保证属性在整个Web应用范围内的一致性,有必要监视ServletContext对象任何属性的改变。

ServletContextAttributeListener侦听器就是为了这一目的而设立的。该侦听器是一个实现了接口ServletContextAttributeListener的Java类。
有以下三种方法:

public void attributeAdded (ServletContextAttributeEvent scab) :通知向Servlet上下文中添加了一个新属性。在添加属性之后调用该方法。

public void attributeRemoved (ServletContextAttributeEvent scab)︰通知现有属性已从Servlet上下文中移除。在移除属性之后调用该方法。

public void attributeReplaced (ServletContextAttributeEvent scab)︰通知已替换Servlet上下文中的一个属性。在替换属性之后调用该方法。

(5)HttpSessionAttributeListener 接口

侦听session属性的变化,包括session属性的创建、销毁和修改事件。接口中声明3种方法 attributeAdded()attributeRemoved()attributeReplaced()

public void attributeAdded (HttpSessionBindingEvent hsbe) :当添加一个新的session属性时,监听器被激活。此方法被调用。

public void attributeRemoved (HttpSessionBindingEvent hsbe) :当一个已有的session属性被删除后,监听器被激活。此方法被调用。

public void attributeReplaced (HttpSessionBindingEvent hsbe) :当一个session属性值被修改时,监听器被激活。此方法被调用。

(6)HttpSessionBindingListener 接口

该接口有两种方法:

public void valueBound (HttpSessionBindingEvent event) :当对象正在被绑定到Session中,Servlet容器通知对象它将被绑定到某个会话并标识该会话。

public void valueUnbound (HttpSessionBindingEvent event) :当从Session中删除对象时,Servlet容器通知对象要从某个会话中取消对它的绑定并标识该会话。

在上述事件中,容器通过HttpSessionBindingEvent对象来通知侦听器发生的事件的具体信息。该侦听器利用HttpSessionBindingEvent对象访问与它相联系的HttpSession对象

HttpSessionBindingEvent类提供了两种方法:

public HttpSessionBindingEvent (HttpSession session,String name) :构造一个事件,通知对象它已经被绑定到会话,或者已经从会话中取消了对它的绑定。要接收该事件,对象必须实现HttpSessionBindingListener。

public HttpSessionBindingEvent (HttpSession session,String name,Object value):构造一个事件,通知对象它已经被绑定到会话,或者已经从会话中取消了对它的绑定。要接收该事件,对象必须实现HttpSessionBindingListener。

三、部署监听器

(1)@WebListener

@WebListener注解将类声明为监听器,被@WebListener标注的类必须实现以下至少一个接口: ServletContextListener、ServletContextAttributeListener、ServletRequestListener、ServletRequestAttributeListener、HttpSessionListener.HttpSessionAttributeListener等。@WebListener注解有可选属性value,类型是String,用于描述监听器的信息。
如:
@WebListener("this is a demo ")
public class TestListener implements ServletContextListener {… .}
(注意:用这个注解就不用再xml文件里面配置了)

(2)xml文件部署

	...
<listener>
    <listener-class>packagename.classname</listener-class> <!--listener类的位置-->
</listener>
	...

注意:Web监听程序主要监听各种事件,当事件触发后在后台自动执行某些操作。它们监听的对象包括Web应用的上下文信息 (ServletContext) 、 Servlet会话信息(session)和Servlet请求信息(Request)等。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值