问题:什么是持久化?让我们用一张图片来进行说明吧。
Session的持久化:
Session的持久化就是将HttpSession对象从内存中转移到文件系统或数据库中,这样做的好处是:减少系统资源的占用,如果Servlet容器突然关闭或重启,或Web应用重启,这些持久化了的HttpSession对象可以重新加载进来,对于客户端,还是使用同一个Session。
Session的持久化是由Session Manager来管理的,Tomcat提供了两个实现类:
org.apache.catalina.session.StandardManager
org.apache.catalina.session.PersistentManager
1、StandardManager是默认的Session Manager。它的实现机制是:当Tomcat服务器关闭或重启后,或Web应用被重新加载时,会将内存中所有的HttpSession对象保存到文件系统中,默认的文件路径是%CATALINA_HOME%\work\Catalina\
重启Tomcat后,Tomcat服务器把SESSIONS.ser中的持久化HttpSession对象加载到内存中。
2、PersistentManager能够把HttpSession对象保存到Session Store中,它提供了相比StandardManager更加灵活的管理能力,具有容错能力,控制内存中HttpSession对象的数目等。
Tomcat实现了Session Store的接口为org.apache.catalina.session.Store,目前提供了两个实现这一接口的类:org.apache.catalina.session.FileStore和org.apache.catalina.session.JDBCStore。FileStore会将HttpSession保存到文件系统中;而JDBCStore则将HttpSession对象保存到数据库表中。
下面给出这两个类的配置:
配置FileStore。在server.xml中,在Web应用的
debug=0;
saveOnRestart=”true”
maxActiveSessions=”-1”
minIdleSwap=”-1”
maxIdleSwap=”-1”
maxIdleBackup=”-1”
配置JDBCStore。在server.xml中,在Web应用的
debug=0;
saveOnRestart=”true”
maxActiveSessions=”-1”
minIdleSwap=”-1”
maxIdleSwap=”-1”
maxIdleBackup=”-1”
CREATE TABLE tomcat_sessions(
session_id VARCHAR(10) NOT NULL PRIMARY KEY,
session_data MEDIUMBLOB,
session_valid CHAR(1) NOT NULL,
max_inactive INT NOT NULL,
last_access BIGINT NOT NULL,
app_name VARCHR(255),
KEY kapp_name(app_name)
);
参考:
blog.csdn.net/mr_li13/article/details/48896915
liaohexiang.iteye.com/blog/826268