servlet监听器.docx
《servlet监听器.docx》由会员分享,可在线阅读,更多相关《servlet监听器.docx(28页珍藏版)》请在冰豆网上搜索。
![servlet监听器.docx](https://file1.bdocx.com/fileroot1/2023-8/7/f7477122-0fb8-4f50-8cd7-23e151ce42ea/f7477122-0fb8-4f50-8cd7-23e151ce42ea1.gif)
servlet监听器
Servlet监听器:
1,什么是监听器?
其主要的功能就是监听Web的各种操作,当相关的操作触发后将产生的事件,并对此事件进行处理;
2,对application监听!
对application监听,实际上就是对ServletContext(Servlet上下文)监听,主要使用ServletContextListener和ServletContextAttributeListener两个接口;
∙ServletContext状态监听:
ServletContextListener接口;
对Servlet上下文状态监听可以使用javax.servlet.ServletContextListener接口,此接口的方法如下:
No
方法
类型
描述
1
publicvoidcontextInitialized(ServletContextEventsce)
普通
容器启动时触发
2
publicvoidcontextDestoryed(ServletContextEventsce)
普通
容器销毁时触发
在ServletContext监听操作中,一旦触发了ServletContextListener接口中定义的事件后,可以通过ServletContextEvent进行事件的处理,此事件定义的方法如下:
No
方法
类型
描述
1
publicServletContextgetServletContext()
普通
取得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 ServletContextListener {
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.}
packagecom.keith.listener;
importjavax.servlet.ServletContextEvent;
importjavax.servlet.ServletContextListener;
publicclassServletContextListenerDemoimplementsServletContextListener{
/**
*context销毁时触发
*/
publicvoidcontextDestroyed(ServletContextEventevent){
System.out.println("容器销毁时触发--->"+event.getServletContext().getContextPath());
}
/**
*context加载的时候触发
*/
publicvoidcontextInitialized(ServletContextEventevent){
System.out.println("容器初始化--->"
+event.getServletContext().getContextPath());
}
}
在web.xml里这样配置:
Xml代码
1.
2. com.keith.listener.ServletContextListenerDemo
3.
com.keith.listener.ServletContextListenerDemo
在web服务器关闭或者重启的时候会输出:
容器初始化--->/jsp(jsp是我的工程名);信息;
∙ServletContext属性监听:
ServletContextAttributeListener接口
对Servlet上下文属性操作监听,可以使用javax.servlet.ServletContextAttributeListener接口,对此接口定义的方法:
No
方法
类型
描述
1
publicvoidattributeAdded(ServletContextAttributeEventscab)
普通
增加属性时触发
2
publicvoidattributeRemoved(ServletContextAttributeEventscab)
普通
删除属性时触发
3
publicvoidattributeReplaced(ServletContextAttributeEventscab)
普通
替换属性(重复设置)时触发
在上下文属性监听中,一旦触发了SerlvetContextAttributeListener接口中定义的事件后,可以通过ServletContextAttributeEvent进行事件的处理,此事件定义的方法如下:
No
方法
类型
描述
1
publicStringgetName()
普通
取得设置的属性名称
2
publicObjectgetValue()
普通
取得设置的属性内容
对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 event) {
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(ServletContextAttributeEvent event) {
27. System.out.println("---替换属性时--》属性名称:
"+event.getName()+", 属性内容:
"+event.getValue());
28. }
29.
30.}
packagecom.keith.listener;
importjavax.servlet.ServletContextAttributeEvent;
importjavax.servlet.ServletContextAttributeListener;
publicclassServletContextAttributeListenerDemoimplements
ServletContextAttributeListener{
/**
*增加属性时触发
*/
publicvoidattributeAdded(ServletContextAttributeEventevent){
System.out.println("---增加属性时--》属性名称:
"+event.getName()+",属性内容:
"+event.getValue());
}
/**
*移除属性时触发
*/
publicvoidattributeRemoved(ServletContextAttributeEventevent){
System.out.println("---移除属性时--》属性名称:
"+event.getName()+",属性内容:
"+event.getValue());
}
/**
*替换属性时触发
*/
publicvoidattributeReplaced(ServletContextAttributeEventevent){
System.out.println("---替换属性时--》属性名称:
"+event.getName()+",属性内容:
"+event.getValue());
}
}
web.xml:
Xml代码
1.
2. com.keith.listener.ServletContextAttributeListenerDemo
3.
com.keith.listener.ServletContextAttributeListenerDemo
在页面我们可以这样测试,观察控制台:
Java代码
1.<%
2. this.getServletContext().setAttribute("time:
","2011年");
3. %>
4.<%
5. this.getServletContext().removeAttribute("time");
6. %>
<%
this.getServletContext().setAttribute("time:
","2011年");
%>
<%
this.getServletContext().removeAttribute("time");
%>
3,对session监听
在监听器中,针对于session的监听操作主要使用HttpSessionListener,HttpSessionAttributeListener和HttpSessionBindingListener接口:
∙session状态监听:
HttpSessionListener接口:
当需要对创建或销毁session的操作进行监听时,可以试想javax.servlet.http.HttpSessionListener接口,此接口定义的方法如下:
No
方法
类型
描述
1
publicvoidsessionCreated(HttpSessionEventse)
普通
session创建时调用
2
publicvoidsessionDestoryed(HttpSessionEventse)
普通
session销毁时调用
当session创建或销毁后,将产生HttpSessionEvent事件,此事件定义的方法如下:
No
方法
类型
描述
1
publicHttpSessiongetSession()
普通
取得当前的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 HttpSessionListener {
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.}
packagecom.keith.listener;
importjavax.servlet.http.HttpSessionEvent;
importjavax.servlet.http.HttpSessionListener;
publicclassHttpSessionListenerDemoimplementsHttpSessionListener{
/**
*session创建时触发
*/
publicvoidsessionCreated(HttpSessionEventevent){
System.out.println("Session创建,SESSIONID=="+event.getSession().getId());
}
/**
*session销毁时触发
*/
publicvoidsessionDestroyed(HttpSessionEventevent){
System.out.println("session销毁,SESSIONID=="+event.getSession().getId());
}
}
web.xml:
Java代码
1.
2. com.keith.listener.HttpSessionListenerDemo
3.
com.keith.listener.HttpSessionListenerDemo
当访问一个动态页面的时候,观察后台!
、
session的销毁操作:
当一个新用户打开一个新的动态页面时,服务器会为新用户分配一个session,并且触发HttpSessionListener接口中的sessionCreated()事件,但是在session有2种销毁方法:
1,调用HttpSession接口中的invalidate()方法,让一个session失效;
2,配置session的时间,在web.xml中这样配置的session的有效时间:
Java代码
1.
2. 5
3.
5
session在5分钟后失效;默认的时间是30分钟;
∙session属性监听:
HttpSessionAttributeListener接口;
在session监听中也可以对session的属性进行监听,这一点与监听servletContext属性的道理一样,要对session的属性操作监听,可以使用javax.servlet.http.HttpSessionAttributeListener接口完成;此接口的定义方法如下:
No
方法
类型
描述
1
publicvoidattributeAdded(HttpSessionBindingEventse)
普通
增加属性时触发
2
publicvoidattributeRemoved(HttpSessionBindingEventse)
普通
删除属性时触发
3
publicvoidattributeReplaced(HttpSessionBindingEventse)
普通
替换属性时触发
当进行属性操作时,将根据属性的操作触发HttpSessionAttributeListener接口中的方法,每个操作方法都将产生HttpSessionbindingEvent事件,此事件定义的方法如下:
No
方法
类型
描述
1
publicHttpSessiongetSession()
普通
取得session
2
publicStringgetName()
普通
取得属性名称
3
publicObjectgetValue()
普通
取得属性的内容
对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 HttpSessionAttributeListener{
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 event) {
19. System.out.println(event.getSession().getId()+",移除了属性---》属性名称:
"+event.getName()+",属性内容:
"+event.getValue());
20. }
21.
22. /**
23. * 属性替换时触发
24. */
25. public void attributeReplaced(HttpSessionBindingEvent event) {
26. System.out.println(event.getSession().getId()+",替换了属性---》属性名称:
"+event.getName()+",属性内容:
"+event.getValue());
27. }
28.
29.}
packagecom.keith