八种web监听器详解
a)Web中有三个事件源,分别是ServletContext->HttpSession->ServletRequest
要在web.xml中进行事件源注册事件监听器
b)ServletContext对象 Context对象 实现的接口是没有适配器的 在初始化工作中使用的非常多
>>创建和销毁:ServletContextListener,Web容器部署时产生,Web容器重新部署时销毁原ServletContext对象
>>属性变化:ServletContextAttributeListner
application.setAttirbute("name","jack")
setAttribute("name","杰克")
removeAttribute("name")
c)ServletRequest对象 请求对象
>>创建和销毁:ServletRequestListener, 每次请求产生,响应完毕后销毁,产生和消亡的频率非常快
>>属性变化:ServletRequestAttributeListner
request.setAttirbute("name","jack")
setAttribute("name","杰克")
removeAttribute("name")
d)HttpSession对象 会话对象
>>创建和销毁:HttpSessionListener,当Web容器创建HttpSession对象中产生,当Web容器销毁HttpSession对象执行对应的销毁方法
也就是说访问页面的时候就创建,默认30分钟后就消亡
>>属性变化:HttpSessionAttributeListner
session.setAttirbute("name","jack")
setAttribute("name","杰克")
removeAttribute("name")
对属性的监听
e)HttpSessionBindListener监听器,专用于监听JavaBean对象在HttpSession中的状态情况
但凡是监听三个域对象,就需要在web.xml文件中配置,除外,无需要web.xml文件配置
当HttpSession不用时,但用在HttpSession的有效期中,这时将内存中的HttpSessio移到外存,叫钝化。
反之,将HttpSession由外存移到内存,叫激活。
f)HttpSessionActivationListener监听器,专用于监听JavaBean对象的钝化与激活
监听器的工作过程和生命周期
开发过程:
a)写一个普通类实现对应的接口,即事件监听器
b)在web.xml文件中注册事件监听器
<!-- 事件源注册事件监听器,由容器完成 -->
<listener>
<listener-class>cn.itcast.web.listener.MyServletContextListener</listener-class>
</listener>
生命周期:
第一次 空参构造(1次)->初始化(1次) 第二次 销毁化(1次)->空参构造(1次)->初始化(1次) 是一个单例的模式
在部署web应用是产生,即用户第一次访问之前已经产生,在重新部署web应用时,后销毁原监听器,再产生新的监听器
package cn.itcast.web.listener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; //事件监听器[用于监听ServletContext对象产生和销毁] public class MyServletContextListener implements ServletContextListener{ public MyServletContextListener(){ System.out.println("空参构造"); System.out.println(this.hashCode()); } //产生 public void contextInitialized(ServletContextEvent sce) { System.out.println("ServletContext产生"); System.out.println(this.hashCode()); } //销毁 public void contextDestroyed(ServletContextEvent sce) { System.out.println("ServletContext销毁"); System.out.println(this.hashCode()); } }
package cn.itcast.web.listener; import java.util.Date; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; //监听器[用于监听HttpSesison产生和销毁] public class MyHttpSessionListener implements HttpSessionListener { //产生 public void sessionCreated(HttpSessionEvent se) { HttpSession session = se.getSession(); System.out.println(session.getId()); System.out.println("sessionCreated()" + new Date().toLocaleString()); } //销毁 public void sessionDestroyed(HttpSessionEvent se) { HttpSession session = se.getSession(); System.out.println(session.getId()); System.out.println("sessionDestroyed()"); System.out.println("sessionCreated()" + new Date().toLocaleString()); } }
package cn.itcast.web.listener; import javax.servlet.ServletRequestEvent; import javax.servlet.ServletRequestListener; //监听器[用于监听ServletRequest对象的产生和销毁] public class MyServletRequestListener implements ServletRequestListener { //产生 public void requestInitialized(ServletRequestEvent sre) { System.out.println("requestInitialized()"); } //销毁 public void requestDestroyed(ServletRequestEvent sre) { System.out.println("requestDestroyed()"); } }