有时候当服务器突然宕机,我们需要将session的数据保留,并且下次重启之后可以使用。此时就可以考虑session的钝化与活化
session的钝化:内存的数据写入到硬盘上的过程。
session的活化:与钝化相反,就是将硬盘的数据恢复到内存中。
session的钝化与活化不是针对session的而是针对放入session中的对象的。
比如:我们将一个user对象的数据放入到session中,那么这个user对象需要实现HttpSessionActivationListener接口以及Serializable接口。
在HttpSessionActivationListener接口中有两个方法:sessionWillPassivate(HttpSessionEvent se) 当前对象被钝化时会触发该方法的执行。
sessionDidActivate(HttpSessionEvent se)当前对象被活化时会触发该方法的执行。
上代码:
package com.wk.session; import java.io.Serializable; import javax.servlet.http.HttpSessionActivationListener; import javax.servlet.http.HttpSessionEvent; //实现HttpSessionActivationListener接口,该监听器不需要注册。 public class User implements HttpSessionActivationListener, Serializable { /** * */ private static final long serialVersionUID = 1L; private String name; private String pass; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } @Override public String toString() { return "User [name=" + name + ", pass=" + pass + "]"; } //当前放入session的对象被钝化时会触发该方法的执行。突然宕机会触发该方法。 @Override public void sessionWillPassivate(HttpSessionEvent se) { System.out.println("user 将要钝化"); } //当前放入session的对象被活化时会触发该方法的执行。重启会触发该方法 @Override public void sessionDidActivate(HttpSessionEvent se) { System.out.println("user 将要活化"); } }