组团学

监听器的生命周期

阅读 (838280)

1、创建与销毁监听器:

ServletContextListener:Tomcat启动和关闭时调用下面两个方法

public void contextInitialized(ServletContextEvent evt):ServletContext对象被创建后调用;

public void contextDestroyed(ServletContextEvent evt):ServletContext对象被销毁前调用;

HttpSessionListener:开始会话和结束会话时调用下面两个方法

public void sessionCreated(HttpSessionEvent evt):HttpSession对象被创建后调用;

public void sessionDestroyed(HttpSessionEvent evt):HttpSession对象被销毁前调用;

ServletRequestListener:开始请求和结束请求时调用下面两个方法

public void requestInitiallized(ServletRequestEvent evt):ServletRequest对象被创建后调用;

public void requestDestroyed(ServletRequestEvent evt):ServletRequest对象被销毁前调用。

2、事件对象

ServletContextEvent:ServletContext getServletContext();

HttpSeessionEvent:HttpSession getSession();

ServletRequestEvent

​ ServletRequest getServletRequest()

​ ServletContext getServletContext()

3、案例

  • 编写MyServletContextListener类,实现ServletContextListener接口;

  • 在web.xml文件中部署监听器;

  • 为了看到session销毁的效果,在web.xml文件中设置session失效时间为1分钟;

/* * ServletContextListener实现类 * contextDestroyed() -- 在ServletContext对象被销毁前调用 * contextInitialized() -- -- 在ServletContext对象被创建后调用 * ServletContextEvent -- 事件类对象 * 该类有getServletContext(),用来获取ServletContext对象,即获取事件源对象 */ public class MyServletContextListener implements ServletContextListener { public void contextDestroyed(ServletContextEvent evt) { System.out.println("销毁ServletContext对象"); } public void contextInitialized(ServletContextEvent evt) { System.out.println("创建ServletContext对象"); } }
/* * HttpSessionListener实现类 * sessionCreated() -- 在HttpSession对象被创建后被调用 * sessionDestroyed() -- -- 在HttpSession对象被销毁前调用 * HttpSessionEvent -- 事件类对象 * 该类有getSession(),用来获取当前HttpSession对象,即获取事件源对象 */ public class MyHttpSessionListener implements HttpSessionListener { public void sessionCreated(HttpSessionEvent evt) { System.out.println("创建session对象"); } public void sessionDestroyed(HttpSessionEvent evt) { System.out.println("销毁session对象"); } }
/* * ServletRequestListener实现类 * requestDestroyed() -- 在ServletRequest对象被销毁前调用 * requestInitialized() -- 在ServletRequest对象被创建后调用 * ServletRequestEvent -- 事件类对象 * 该类有getServletContext(),用来获取ServletContext对象 * 该类有getServletRequest(),用来获取当前ServletRequest对象,即事件源对象 */ public class MyServletRequestListener implements ServletRequestListener { public void requestDestroyed(ServletRequestEvent evt) { System.out.println("销毁request对象"); } public void requestInitialized(ServletRequestEvent evt) { System.out.println("创建request对象"); } }
<listener> <listener-class>cn.itcast.listener.MyServletContextListener</listener-class> </listener> <listener> <listener-class>cn.itcast.listener.MyHttpSessionListener</listener-class> </listener> <listener> <listener-class>cn.itcast.listener.MyServletRequestListener</listener-class> </listener> <session-config> <session-timeout>1</session-timeout> </session-config>
需要 登录 才可以提问哦