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
============
你可能喜欢
Java学习笔记 | 26页 | 1下载券 | |
Java工作笔记(必看经典) | 30页 | 免费 | |
Java学习笔记 | 8页 | 2下载券 | |
Java 学习笔记 | 26页 | 2下载券 | |
Java基础学习笔记整理 | 42页 | 免费 | |
更多与“Java笔记”相关的内容>> |
您的评论
240
用户评价