【Session】Tomcat中Session持久化到文件系统或数据库 - nick_huang - 博客园

1. 参考的优秀文章

Tomcat Session 持久化

Package org.apache.catalina.session

 

最近同事在做Session外置的功能,我对Session持久化、共享也不太了解,学习一下。

 

一般来说,Tomcat原生的持久化Session方式,有StandardManager和PersistentManager。

版本说明:apache-tomcat-7.0.69-windows-x64

 

2. 关闭、重启Tomcat,是否持久化Session

Tomcat在关闭的时候,持久化Session到工作目录中,然后再次启动时再加载,对用户感觉Session是持续地存在的。

 

页面用到一个实体类:

复制代码

package com.nicchagil.session;

import java.io.Serializable;

public class User implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    private Integer id;
    private String userName;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", userName=" + userName + "]";
    }
    
}

复制代码

(扩展知识)关于序列化

需注意的是:因为到时Session需要序列化到文件系统中,而这个类的对象需要放到Session中,所以这个类需要被序列化,故实现序列化接口。

如果实现序列化接口,强烈建议显示定义serialVersionUID,它表明了序列化版本号。如果没定义,serialVersionUID将由JVM自动运算,而serialVersionUID的运算值高度依赖class的编译结果,所以,基于稳定性考虑,我们还是显式定义此class的序列化版本为上。

 

实验步骤:

1、启动Tomcat,我们写入往Session写入一些东西。如果不确认是否写入,可以尝试读取出来,是否成功读取。

2、关闭Tomcat,查看Tomcat的工作目录的有没有SESSIONS.ser文件。

文件的路径可能跟我们运行的环境有关:

如果我用Tomcat独立运行,该文件位于:D:\green\apache-tomcat-7.0.69-windows-x64\apache-tomcat-7.0.69\work\Catalina\localhost\041SessionSerialization\SESSIONS.ser

如果在Eclipse运行Tomcat,因Tomcat的工作目录配置不同(不同的配置方式又不同),该文件在于:D:\workspace\jee_workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\041SessionSerialization\SESSIONS.ser

3、启动Tomcat,在没有写入Session的前提下,尝试读取Session,以测试Tomcat是否把持久化的Session恢复。

 

注:

如果Session重启后没有恢复,检查Tomcat的context.xml配置文件的这个部分:

    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->

默认的Tomcat配置是注释着的,说明没有禁用持久化缓存的功能,说明Tomcat重启时默认持久化Session。

 

3. 使用PersistentManager持久化Session

PersistentManager的主要功能:在系统运行中,持久化Session或恢复Session。

它的意义在于:

1、Tomcat关闭、重启时的Session持久化

2、备份Session以增强系统容错能力

3、将处理内存的Session持久化到硬盘,避免因Session过多而内存溢出

 

3.1. 持久化到文件系统

将Session持久化到文件系统的配置:

按 Ctrl+C 复制代码

 

按 Ctrl+C 复制代码

启动Tomcat后,写入Session后,观察TOMCAT_HOME/work/Catalina/localhost/session下文件的变化。

3.2. 持久化到数据库

将Session持久化到数据库的配置:

跟上例类似,只不过这次的store是DB的store,是存储策略的不同。(这里测试使用MySQL 5.0)

按 Ctrl+C 复制代码

 

按 Ctrl+C 复制代码

 

然后表结构如下:

按 Ctrl+C 复制代码

 

按 Ctrl+C 复制代码

 

记得将MySQL的驱动包放入Tomcat的lib目录下。

启动后,写入Session后,观察t_session的变化。

 

4. 附录

4.1. 用到的类的关系图

 

4.2. 更多配置

关于StandardManager和PersistentManager更多的配置,请见Package org.apache.catalina.session

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值