监听器:监听某个对象状态的变化
被监听的对象:request、session、servletContext
监听对象的创建和销毁/对象属性的变化
ServletContext | HttpSession | ServletRequest |
ServletContextListener | HttpSessionListener | ServletRequestListener |
ServletContextAttributeListener | HttpSessionAttributeListener | ServletRequestAttributeListener |
与session相关的监听器,监听session中的对象
HttpSessionBindingListener 对象在session绑定或对象从session中解绑
HttpSessionActivationListener 对象的钝化与活化,(大访问量时考虑将session持久化)
这两个接口是绑到对象中的,不需要在web.xml中配置
钝化:将session持久化到磁盘
活化:将session从磁盘到内存
tomcat的钝化:
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<!-- maxIdleSwap:session中的对象多长时间不使用就钝化 单位:分钟 -->
<!-- directory:钝化后的对象的文件写到磁盘的哪个目录下 配置钝化的对象文件在work/catalina/localhost/钝化文件 -->
<Manager
className="org.apache.catalina.session.PersistentManager"
maxIdleSwap="1">
<Store className="org.apache.catalina.session.FileStore"
directory="demo01" />
</Manager>
</Context>
package cn.sasa.domain; import java.io.Serializable; import javax.servlet.http.HttpSessionActivationListener; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionBindingListener; import javax.servlet.http.HttpSessionEvent; //HttpSessionBindingListener--- Customer对象绑定到session或从session解绑 //HttpSessionActivationListener---钝化/活化。钝化:将session持久化到磁盘。活化:session从磁盘到内存。(大访问量时可将session设置持久化) //Serializable 序列化到磁盘 public class Customer implements HttpSessionBindingListener, HttpSessionActivationListener,Serializable{ private static final long serialVersionUID = 1L; public String getName() { return name; } public void setName(String name) { this.name = name; } private String name; public void valueBound(HttpSessionBindingEvent event) { System.out.println("cus 绑定"); } public void valueUnbound(HttpSessionBindingEvent event) { System.out.println("cus 解绑"); } //钝化 public void sessionWillPassivate(HttpSessionEvent se) { System.out.println("Customer passivate"); } //活化 public void sessionDidActivate(HttpSessionEvent se) { System.out.println("Customer Activate"); } }