servlet监听器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Servlet监听器:
1,什么是监听器?
其主要的功能就是监听Web的各种操作,当相关的操作触发后将产生的事件,并对此事件进行处理;
2,对application监听!
对application监听,实际上就是对ServletContext(Servlet上下文)监听,主要使用ServletContextListener和ServletContextAttributeListener 两个接口;
ServletContext状态监听:ServletContextListener接口;
对Servlet上下文状态监听可以使用javax.servlet.ServletContextListener 接口,此接口的方法如下:
No 方法类

描述
1 public void contextInitialized(ServletContextEvent
sce)


容器启动时
触发
2 public void contextDestoryed(ServletContextEvent
sce)


容器销毁时
触发
在ServletContext监听操作中,一旦触发了ServletContextListener接口中定义的事件后,可以通过ServletContextEvent进行事件的处理,此事件定义的方法如下:
No 方法类

描述
1 public ServletContext
getServletContext()


取得ServletContext对

可以通过getServletContext()方法取得一个ServletContext对象的实例,一个简单的ServletContextListenerDemo:
Java代码
1.package com.keith.listener;
2.
3.import javax.servlet.ServletContextEvent;
4.import javax.servlet.ServletContextListener;
5.
6.public class ServletContextListenerDemo implements ServletCont
extListener {
7.
8. /**
9. * context销毁时触发
10. */
11. public void contextDestroyed(ServletContextEvent event) {
12. System.out.println("容器销毁时触发
--->"+event.getServletContext().getContextPath());
13. }
14.
15. /**
16. * context加载的时候触发
17. */
18. public void contextInitialized(ServletContextEvent event)
{
19. System.out.println("容器初始化---> "
20. + event.getServletContext().getContextPath())
;
21. }
22.
23.}
在web.xml里这样配置:
Xml代码
1.<listener>
2.<listener-class>com.keith.listener.ServletContextListene
rDemo</listener-class>
3.</listener>
在web服务器关闭或者重启的时候会输出:容器初始化---> /jsp(jsp是我的
工程名);信息;
ServletContext属性监听:ServletContextAttributeListener接口
对Servlet上下文属性操作监听,可以使用
javax.servlet.ServletContextAttributeListener接口,对此接口定义的方法:No 方法类描述

1 public void attributeAdded(ServletContextAttribute
Event scab)


增加属性时触

2 public void
attributeRemoved(ServletContextAttribute Event
scab)


删除属性时触

3 public void
attributeReplaced(ServletContextAttribute Event
scab)


替换属性(重
复设置)时触

在上下文属性监听中,一旦触发了SerlvetContextAttributeListener接口中定义的事件后,可以通过ServletContextAttributeEvent进行事件的处理,此事件定义的方法如下:
No 方法类型描述
1 public String getName() 普通取得设置的属性名称
2 public Object getValue() 普通取得设置的属性内容
对ServletContext属性的监听例子:ServletContextAttributeListenerDemo:Java代码
1.package com.keith.listener;
2.
3.import javax.servlet.ServletContextAttributeEvent;
4.import javax.servlet.ServletContextAttributeListener;
5.
6.public class ServletContextAttributeListenerDemo implements
7. ServletContextAttributeListener {
8.
9. /**
10. * 增加属性时触发
11. */
12. public void attributeAdded(ServletContextAttributeEvent e
vent) {
13. System.out.println("---增加属性时--》属性名称:
"+event.getName()+", 属性内容:"+event.getValue());
14. }
15.
16. /**
17. * 移除属性时触发
18. */
19. public void attributeRemoved(ServletContextAttributeEvent
event) {
20. System.out.println("---移除属性时--》属性名称:
"+event.getName()+", 属性内容:"+event.getValue());
21. }
22.
23. /**
24. * 替换属性时触发
25. */
26. public void attributeReplaced(ServletContextAttributeEven
t event) {
27. System.out.println("---替换属性时--》属性名称:
"+event.getName()+", 属性内容:"+event.getValue());
28. }
29.
30.}
web.xml:
Xml代码
1.<listener>
2.<listener-class>com.keith.listener.ServletContextAttribu
teListenerDemo</listener-class>
3.</listener>
在页面我们可以这样测试,观察控制台:
Java代码
1.<%
2. this.getServletContext().setAttribute("time:","2011年
");
3. %>
4.<%
5. this.getServletContext().removeAttribute("time");
6. %>
3,对session监听
在监听器中,针对于session的监听操作主要使用HttpSessionListener,HttpSessionAttributeListener和HttpSessionBindingListener接口:
session状态监听:HttpSessionListener接口:
当需要对创建或销毁session 的操作进行监听时,可以试想
javax.servlet.http.HttpSessionListener 接口,此接口定义的方法如下: No 方法


描述 1 public void sessionCreated(HttpSessionEvent se)
普通 session 创建时调
用 2
public void sessionDestoryed(HttpSessionEvent se) 普通 session 销毁时调用
当session 创建或销毁后,将产生HttpSessionEvent 事件,此事件定义的方法如下:
No 方法
类型 描述
1 public HttpSession getSession() 普通 取得当前的session
session 状态监听: Java 代码
1. package com.keith.listener;
2.
3. import javax.servlet.http.HttpSessionEvent;
4. import javax.servlet.http.HttpSessionListener;
5.
6. public class HttpSessionListenerDemo implements HttpSessionLis tener {
7.
8. /**
9. * session 创建时触发 10. */
11. public void sessionCreated(HttpSessionEvent event) { 12. System.out.println("Session 创建,
SESSION ID == "+event.getSession().getId()); 13. } 14.
15. /**
16. * session 销毁时触发 17. */
18. public void sessionDestroyed(HttpSessionEvent event) { 19. System.out.println("session 销毁,
SESSION ID == "+event.getSession().getId()); 20. } 21.
22.}
web.xml:
Java代码
1.<listener>
2. <listener-class>com.keith.listener.HttpSessionListenerDe
mo</listener-class>
3.</listener>
当访问一个动态页面的时候,观察后台!、
session的销毁操作:
当一个新用户打开一个新的动态页面时,服务器会为新用户分配一个session,并且触发HttpSessionListener接口中的sessionCreated()事件,但是在session有2种销毁方法:
1,调用HttpSession接口中的invalidate()方法,让一个session失效;
2,配置session的时间,在web.xml中这样配置的session的有效时间:
Java代码
1.<session-config>
2. <session-timeout>5</session-timeout>
3.</session-config>
session在5分钟后失效;默认的时间是30分钟;
session属性监听:HttpSessionAttributeListener接口;
在session监听中也可以对session的属性进行监听,这一点与监听servletContext属性的道理一样,要对session的属性操作监听,可以使用javax.servlet.http.HttpSessionAttribute Listener接口完成;此接口的定义方法如下:
No 方法类

描述
1 public void attributeAdded(HttpSessionBindingEvent
se)


增加属性时
触发
2 public void attributeRemoved(HttpSessionBindingEvent
se)


删除属性时
触发
3 public void 普替换属性时
attributeReplaced(HttpSessionBindingEvent se) 通触发
当进行属性操作时,将根据属性的操作触发HttpSessionAttributeListener接口中的方法,每个操作方法都将产生HttpSessionbindingEvent事件,此事件定义的方法如下:
No 方法类型描述
1 public HttpSession getSession() 普通取得session
2 public String getName() 普通取得属性名称
3 public Object getValue() 普通取得属性的内容
对session的属性操作监听:HttpSessionAttributeListenerDemo:
Java代码
1.package com.keith.listener;
2.
3.import javax.servlet.http.HttpSessionAttributeListener;
4.import javax.servlet.http.HttpSessionBindingEvent;
5.
6.public class HttpSessionAttributeListenerDemo implements HttpS
essionAttributeListener{
7.
8. /**
9. * 属性增加时触发
10. */
11. public void attributeAdded(HttpSessionBindingEvent event)
{
12. System.out.println(event.getSession().getId()+",增加
了属性---》属性名称:"+event.getName()+",属性内容:
"+event.getValue());
13. }
14.
15. /**
16. * 属性移除时触发
17. */
18. public void attributeRemoved(HttpSessionBindingEvent even
t) {
19. System.out.println(event.getSession().getId()+",移除
了属性---》属性名称:"+event.getName()+",属性内容:
"+event.getValue());
20. }
21.
22. /**
23. * 属性替换时触发
24. */
25. public void attributeReplaced(HttpSessionBindingEvent eve
nt) {
26. System.out.println(event.getSession().getId()+",替换
了属性---》属性名称:"+event.getName()+",属性内容:
"+event.getValue());
27. }
28.
29.}
web.xml:
Xml代码
1.<listener>
2.<listener-class>com.keith.listener.HttpSessionAttributeL
istenerDemo</listener-class>
3.</listener>
在页面中对session的setAttribute()/removeAttribute()进行测试;
session属性监听:HttpSessionBindingListener接口,以上的session 监听接口都需要在web.xml文件中配置后才起作用,但是在Web中也提
供了一个javax.servlet.http.HttpSessionBindingListener接口,通过此接口实现的监听程序可以不用配置直接使用,此接口定义的方法如
下:
No 方法类

描述
1 public void valueBound(HttpSessionBindingEvent
event)


绑定对象到
session时触发
2 public void
valueUnbound(httpSessionBindingEvent event)


从session中移除
对象时触发
以上的2个方法都将产生HttpSessionBindingEvent事件,下面通过此接口实现一个用户登陆信息监听的操作:
LoginUser:
Java代码
1.package com.keith.listener;
2.
3.import javax.servlet.http.HttpSessionBindingEvent;
4.import javax.servlet.http.HttpSessionBindingListener;
5.
6.public class LoginUser implements HttpSessionBindingListener {
7. private String name;
8.
9. public LoginUser() {
10.
11. }
12.
13. public LoginUser(String name) {
14. this.setName(name);
15. }
16.
17. /**
18. * 在session中绑定
19. */
20. public void valueBound(HttpSessionBindingEvent event) {
21. System.out.println("---在session中保存LoginUser对象
(name = "+this.getName()+"),
session id = "+event.getSession().getId());
22. }
23.
24. /**
25. * 在session中移除
26. */
27. public void valueUnbound(HttpSessionBindingEvent event) {
28. System.out.println("---从session中移除LoginUser对象
(name = "+this.getName()+"),
session id = "+event.getSession().getId());
29. }
30.
31. public String getName() {
32. return name;
33. }
34.
35. public void setName(String name) {
36. = name;
37. }
38.
39.}
在session.jsp中:
Java代码
1.<%
2. LoginUser user = new LoginUser("keith");
3. session.setAttribute("info",user);
4.%>
访问session.jsp时,看控制台的输出(统一方法测试下移除session时控制台的输出);
4,对request监听
对request操作监听,主要使用ServletRequestListener和ServletRequestAttributeListener两个接口;
请求状态监听:ServletRequestListener接口:
当需要对用户的每次请求进行监听时,可以使用
javax.servlet.ServletRequestListener接口,此接口的定义方法如下:
No 方法类

描述
1 public void requestInitalized(ServletRequestEvent
sre)


请求开始时
调用
2 public void requestDestroyed(ServletRequestEvent
sre)


请求结束时
调用
ServletRequestListener接口一旦监听到事件后,将产生ServletRequestEvent 的事件处理对象,此事件定义的方法如下:
No 方法类

描述
1 public ServletRequest
getServletRequest()


取得ServletRequest对

2 public ServletContext
getServletContext()


取得ServletContext对

对用户的request进行监听:ServlteRequestListenerDemo:Java代码
1.package com.keith.listener;
2.
3.import javax.servlet.ServletRequestEvent;
4.import javax.servlet.ServletRequestListener;
5.
6.public class ServlteRequestListenerDemo implements ServletRequ
estListener{
7.
8. /**
9. * request初始化时触发
10. */
11. public void requestDestroyed(ServletRequestEvent event) {
12. System.out.println("request初始化。

http://"+event.getServletRequest().getRemoteAddr()+event.getSe rvletContext().getContextPath());
13. }
14.
15. /**
16. * request销毁时触发
17. */
18. public void requestInitialized(ServletRequestEvent event)
{
19. System.out.println("request销毁。

http://"+event.getServletRequest().getRemoteAddr()+event.getSe rvletContext().getContextPath());
20. }
21.
22.}
web.xml:
Xml代码
1.<listener>
2.<listener-class>com.keith.listener.ServlteRequestListene
rDemo</listener-class>
3.</listener>
当我们访问工程的时候,看下控制台的输出!
request属性监听:ServletRequestAttributeListener接口
对request范围属性的监听可以使用
javax.servlet.ServletRequestAttributeListener接口,此接口定义的方法如下:
No 方法类

描述
1 public void attributeAdded(ServletRequestAttributeEvent
srae)


属性增
加时触

2 public void
attributeReplaced(ServletRequestAttributeEvent srae)


属性替
换时触

3 public void
attributeRemoved(ServletRequestAttributeEvent srae)


属性删
除时触

加入监听器后,request属性的操作都会产生ServletRequestAttributeEvent 事件,此事件定义的方法如下:
No 方法类型描述
1 public String getName() 普通取得设置的属性名称
2 public Object getValue() 普通取得设置的属性内容
监听器request属性操作---ServletRequestAttributeListenerDemo
Java代码
1.package com.keith.listener;
2.
3.import javax.servlet.ServletRequestAttributeEvent;
4.import javax.servlet.ServletRequestAttributeListener;
5.
6.public class ServletRequestAttributeListenerDemo implements
7. ServletRequestAttributeListener {
8.
9. /**
10. * 增加属性时触发
11. */
12. public void attributeAdded(ServletRequestAttributeEvent e
vent) {
13. System.out.println("---增加request属性--》属性名称:
"+event.getName()+",属性内容:"+event.getValue());
14. }
15.
16. /**
17. * 属性移除时触发
18. */
19. public void attributeRemoved(ServletRequestAttributeEvent
event) {
20. System.out.println("---删除request属性--》属性名称:
"+event.getName()+",属性内容:"+event.getValue());
21. }
22.
23. /**
24. * 替换属性时触发
25. */
26. public void attributeReplaced(ServletRequestAttributeEven
t event) {
27. System.out.println("---替换request属性--》属性名称:
"+event.getName()+",属性内容:"+event.getValue());
28. }
29.
30.}
web.xml:
Xml代码
1.<listener>
2.<listener-class>com.keith.listener.ServletRequestAttribu
teListenerDemo</listener-class>
3.</listener>
request.jsp:
Java代码
1.<%
2. request.setAttribute("name","keith");
3. request.setAttribute("date",new Date());
4.%>。

相关文档
最新文档