1. JavaWeb 监听器概述
- 在 JavaWeb 被监听的事件源为: ServletContext, HttpSession, ServletRequest, 即三大域对象.
- 监听域对象"创建"与"销毁"的监听器;
- 监听域对象"操作域属性"的监听器;
- 监听 HttpSession 的监听器;
- J2EE 文档
javax.servlet包下;
ServletContext 事件源
-
生命周期监听:
ServletContextListener, 它有两个方法, 一个在出生后调用,一个在死亡前调用;void contextInitialized(ServletContextEvent sce);: 创建 ServletContext 时,调用;void contextDestroyed(ServletContext sce);: 销毁 ServletContext 时, 调用;
-
属性监听:
ServletContextAttributeListener,它有三个方法:void attributeAdded(ServletContextAttributeEvent event);: 添加属性时调用;void attributeReplaced(ServletContextAttributeEvent event);: 替换属性时调用;void attributeRemoved(ServletContextAttributeEvent event);: 移除属性时调用
HttpSession 事件源
- 生命周期监听:
HttpSessionListener - 属性监听:
HttpSessionAttributeListener
ServletRequest 事件源
- 生命周期监听:
ServletRequestListener - 属性监听:
ServletRequestAttributeListener
事件对象
ServletContextEvent:- 主要方法
ServletContext getServletContext(), 获取事件源;
- 主要方法
HttpSessionEvent- HttpSesssion getSession(), 获取事件源;
ServletRequestServletContext getServletContext();ServletRequest getServletRequest();
ServletContextAttributeEventServletContext getServletContext(): 获取事件源;String getName(): 获取属性名;Object getValue(): 获取替换之前的属性值;
2. 感知监听
2.1 特点
- 它用来添加到 JavaBean 上,而不是添加到三大域上!
- 这两个监听器都不需要在 web.xml 中注册;
- 与 HttpSession 相关.
2.2 监听器
HttpSessionBindingListener, 它有两个方法void valueBound(HttpSessionBindingEvent event);void valueUnbound(HttpSessionBindingEvent event);
3. session 钝化和活化相关的监听器
- Tomcat 会在 session 长时间不被使用时钝化 session 对象, 所谓钝化 session, 就是把 session 通过
序列化的方式保存到硬盘文件中. 当用户再使用 session 时, Tomcat 还会把钝化的对象再活化 session,
所谓活化就是把硬盘文件中的 session 在反序列化会内存.
3.1 监听器
-
HttpSessionActivationListener, 它有两个方法public void sessionWillPassivate(HttpSessionEvent event): 当对象感知被活化时调用本方法;public void sessionDidActivate(HttpSessionEvent event): 当对象感知被钝化时调用本方法;
-
配置 Tomcat 钝化 session 的参数, 目录:
tomcat/conf/catalina/localhost, 文件名称为项目名称
<Context>
// 该参数固定, maxIdleSwap 表示 session 最大不活动时间 1 分钟
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
// 设置 session 序列化地址 Tomcat/work/catalina/localhost/listener/mysession 目录下
<Store className="org.apache.catalina.session.FileStore" directory="mysession"/>
</Context>
参考资料: