ServletContext、Session Listener (监听器)
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)中的属性在关闭容器时未见容器自动删除(监听器方法不能监听到) |