有时候当服务器突然宕机,我们需要将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 将要活化");
    }

}

 

posted on 2018-07-03 10:43  王衙内  阅读(1971)  评论(0编辑  收藏  举报