ServletContext、Session Listener (监听器)
[测试环境:XP_sp2(zh_CN), jdk1.5.0_10(sun), Tomcat 5.0.28]
Servlet程序分为三类:
· 标准Servlet
· 过滤器
· 监听器
主要有以下三类:
· ServletContext:Servlet上下文(WEB容器的监听)
· Session:对Session监听(用户会话监听)
· Request监听
一、对ServletContext监听
在WEB端实现监听 (一系列的监听接口)
1、ServletContextListener:对整个Servlet上下文监听(启动、销毁)
public void contextInitialized(ServletContextEvent sce):上下文初始化
public void contextDestroyed(ServletContextEvent sce):上下文销毁
ServletContextEvent事件:取得一个ServletContext(application)对象
public ServletContext getServletContext()
2、ServletContextAttributeListener:对Servlet上下文属性的监听
public void attributeAdded(ServletContextAttributeEvent scab):增加属性(setAttribute)
public void attributeRemoved(ServletContextAttributeEvent scab):属性删除(removeAttribute)
public void attributeReplaced(ServletContextAttributeEvent scab):属性替换(第二次设置同一个属性)
ServletContextAttributeEvent事件:能取得设置属性的名称与内容
public String getName():得到属性名称
public Object getValue():得到属性的值
public class XXX implements ServletContextListener,ServletContextAttributeListener {...}
当前虚拟目录的绝对路径: application.getRealPath("/") ;
上下文监听主要是针对容器的:初始化、销毁、属性操作
二、对Session监听
对session的创建、销毁、属性操作
Session属于http协议下的内容:javax.servlet.http.HttpSessionXxxx
1、HttpSessionListener:对session的整体状况的监听
public void sessionCreated(HttpSessionEvent se):session创建
public void sessionDestroyed(HttpSessionEvent se): session销毁
HttpSessionEvent 事件:
public HttpSession getSession();取得当前session
2、HttpSessionAttributeListener: 对session属性监听
public void attributeAdded(HttpSessionBindingEvent se): 增加属性
public void attributeRemoved(HttpSessionBindingEvent se): 属性删除
public void attributeReplaced(HttpSessionBindingEvent se): 属性替换
HttpSessionBindingEvent 事件:
public String getName(); 取得属性名称
public Object getValue();取得属性的值
public HttpSession getSession();取得当前session
public class XXX implements HttpSessionListener,HttpSessionAttributeListener {...}
//-------------------------------------------------------------------
web.xml 增加-->
<!-- 监听器 -->
<listener>
<listener-class>ServletContextListenerDemo</listener-class>
</listener>
<!-- session超时配置 -->
<session-config>
<!-- session 超时分钟值(不是很准确,有误差,TOMCAT v5.0.28 中有延后) -->
<session-timeout>1</session-timeout>
</session-config>
手动使用session失效:
session.invalidate();
//-------------------------------------------------------------------
session.setAttribute(key, value)中的属性在session.invalidate()和session超时失效时都会由容器自己删除(监听器方法可以监听到)
application.setAttribute(key, value)中的属性在关闭容器