监听器
Servlet 程序的主要分类?
· 标准 Servlet(JSP) —— MVC
· 过滤 Servlet(过滤器)
· 监听 Servlet(监听器)
一、什么是监听器?
是指针对于整个 WEB 环境的监听,主要有以下三类:
· ServletContext:Servlet 上下文
· 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():得到属性的值
package cn.listener ; import javax.servlet.* ; public class ServletContextDemo implements ServletContextListener,ServletContextAttributeListener { private ServletContext application = null ; // 实现方法 public void contextInitialized(ServletContextEvent sce) { this.application = sce.getServletContext() ; System.out.println("** 上下文初始化 ...") ; System.out.println("** 当前虚拟目录的绝对路径:"+this.application.getRealPath("/")) ; } public void contextDestroyed(ServletContextEvent sce) { System.out.println("** 上下文销毁 ...") ; } public void attributeAdded(ServletContextAttributeEvent scab) { System.out.println("** 增加属性:"+scab.getName()+" --> "+scab.getValue()) ; } public void attributeRemoved(ServletContextAttributeEvent scab) { System.out.println("** 删除属性:"+scab.getName()+" --> "+scab.getValue()) ; } public void attributeReplaced(ServletContextAttributeEvent scab) { System.out.println("** 替换属性:"+scab.getName()+" --> "+scab.getValue()) ; } }; /* <listener> <listener-class>cn.listener.ServletContextDemo</listener-class> </listener> */
三、监听 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
package cn.listener ; import javax.servlet.http.* ; public class HttpSessionDemo implements HttpSessionListener,HttpSessionAttributeListener { private HttpSession session ; // 实现方法 public void sessionCreated(HttpSessionEvent se) { this.session = se.getSession() ; System.out.println("** Session 创建 ....") ; System.out.println("** SessionID --> "+this.session.getId()) ; } public void sessionDestroyed(HttpSessionEvent se) { System.out.println("** Session 销毁 ....") ; } public void attributeAdded(HttpSessionBindingEvent se) { System.out.println("** Session 增加属性:"+se.getName()+" --> "+se.getValue()) ; } public void attributeRemoved(HttpSessionBindingEvent se) { System.out.println("** Session 删除属性:"+se.getName()+" --> "+se.getValue()) ; } public void attributeReplaced(HttpSessionBindingEvent se) { System.out.println("** Session 替换属性:"+se.getName()+" --> "+se.getValue()) ; } }; /* <listener> <listener-class>cn.listener.HttpSessionDemo</listener-class> </listener> */