servlet的八大监听器

JSP/Servlet 

中的事件处理写过

AWT

Swing

程序的人一定对桌面程序的事件处

理机制印象深刻:通过实现

Listener

接口的类可以在特定事件

(Event)

发生时,

呼叫特定的方法来对事件进行响应。

  

其实我们在编写

JSP/Servle

程序时,也有类似的事件处理机制,所不同的是在

JSP/Servlet

中是在

web.xml

中注册

Listener

Container

在特定事件发生时

呼叫特定的实现

Listener

的类。

  

 

1. Servlet

中的

Listener

Event:  

JSP 2.0/Servlet 2.4

中,共有八个

Listener

接口,六个

Event

类别。

  

ServletContextListener

接口

  

[

接口方法

] contextInitialized()

 contextDestroyed()  

[

接收事件

] ServletContextEvent  

[

触发场景

Container

加载

Web

应用程序时(例如启动

 Container

之后),

会呼叫

contextInitialized()

,而当容器移除

Web

应用程序时,会呼叫

contextDestroyed ()

方法。

  

ServletContextAttributeListener  

[

接口方法

] attributeAdded()

 attributeReplaced()

attributeRemoved()  

[

接收事件

] ServletContextAttributeEvent  

[

触发场景

若有对象加入为

application

ServletContext

)对象的属性,则

会呼叫

attributeAdded()

,同理在置换属性与移除属性时,会分别呼叫

attributeReplaced()

attributeRemoved()

  

HttpSessionListener  

[

接口方法

] sessionCreated()

sessionDestroyed ()  

[

接收事件

] HttpSessionEvent  

[

触发场景

session 

HttpSession

)对象建立或被消灭时,会分别呼叫这

两个方法。

  

HttpSessionAttributeListener  

[

接口方法

] attributeAdded()

 attributeReplaced()

attributeRemoved()  

[

接收事件

] HttpSessionBindingEvent  

[

触发场景

若有对象加入为

session

HttpSession

)对象的属性,则会呼叫

attributeAdded()

,同理在置换属性与移除属性时,会分别呼叫

attributeReplaced()

 attributeRemoved()

  

HttpSessionActivationListener  

[

接口方法

] sessionDidActivate()

 sessionWillPassivate()  

[

接收事件

] HttpSessionEvent  

[

触发场景

Activate

Passivate

是用于置换对象的动作,当

session

对象为

了资源利用或负载平衡等原因而必须暂时储存至硬盘或其它储存器时(透

 

过对

象序列化),所作的动作称之为

Passivate

,而硬盘或储存器上的

session

对象

重新加载

JVM

时所采的动作称之为

Activate

,所以容

 

易理解的,

sessionDidActivate()

 sessionWillPassivate()

分别于

Activeate

后与将

Passivate

前呼叫。

  

ServletRequestListener  

[

接口方法

] requestInitialized()

 requestDestroyed()  

[

接收事件

] RequestEvent  

[

触发场景

request

HttpServletRequest

)对象建立或被消灭时,会分别

呼叫这两个方法。

  

ServletRequestAttributeListener  

[

接口方法

] attributeAdded()

 attributeReplaced()

attributeRemoved()  

[

接收事件

] HttpSessionBindingEvent  

[

触发场景

若有对象加入为

request

HttpServletRequest

)对象的属性,则

会呼叫

attributeAdded()

,同理在置换属性与移除属性时,会分别呼叫

attributeReplaced()

 attributeRemoved()

  

HttpSessionBindingListener  

[

接口方法

] valueBound()

valueUnbound()  

[

接收事件

] HttpSessionBindingEvent  

[

触发场景

实现

HttpSessionBindingListener

 

口的类别,其实例如果被加

入至

session

HttpSession

)对象的属性中,则会呼叫

 valueBound()

,如果被

session

HttpSession

)对象的属性中移除,则会呼叫

valueUnbound()

,实

 HttpSessionBindingListener

接口的类别不需在

web.xml

中设定。

  

2. 

如何注册

Servlet

中的事件

  

实现上面这几个接口的类别,除了

HttpSessionBindingListener

,

必须在

web.xml

中向容器注册,容器才会在对应的事件发生时呼叫对应的类别,如:

  

 < listener >   

 < listener-class > 

demo.servlet.listener.CustomServletContextListener    

   

3. Servlet

事件的应用实例

  

看到这里

,

你也许会有疑问

了解这些

 listener

event 

有什么用呢

?

我平时

开发没有用到这些

,

一样也能完成任务啊

.  

不错

,

在日常的开发中很少用到这些事件处理的方面

,

但是在某些情况下使用事

件处理机制却可以达到事半功倍的效果

,

例如下面两个例子

:  

4.Java

类实例

 

========== 

//

侦听启动和关闭

 

import javax.servlet.ServletContextListener; 

import javax.servlet.*; 

public class TigerListen implements ServletContextListener { 

 public void contextInitialized(ServletContextEvent sce) 

 { 

  System.out.print("Init")  

 } 

 public void contextDestroyed(ServletContextEvent sce) 

 { 

  System.out.print("Destroved")  

 } 

对应的

web.xml

 

============ 

 

    

TigerListen 

 

  

  

============ 

 

1234567890ABCDEFGHIJKLMNabcdefghijklmn!@#$%^&&*()_+.一三五七九贰肆陆扒拾,。青玉案元夕东风夜放花千树更吹落星如雨宝马雕车香满路凤箫声动玉壶光转一夜鱼龙舞蛾儿雪柳黄金缕笑语盈盈暗香去众里寻他千百度暮然回首那人却在灯火阑珊处

阅读已结束,如果下载本文需要使用0下载券

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值