共计 2589 个字符,预计需要花费 7 分钟才能阅读完成。
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> | |
