IT源码网

Session持久化技术讲解

itxm 2021年04月03日 程序员 147 0

tomcat6 中关闭服务会自动把session持久化 

存储在work目录下的一个session.ser 

对于Session的管理,tomcat两个实现类:org.apache.catalina.session.StandardManager

org.apache.catalina.session.PersistentManager

StandardManager  默认的方法可以配置的地方比较少 

PersistentManager  提供了很灵活的管理方式配置性强 

 

网上实现配置PersistentManager 这种例子好多好多大多是两种形式 

形式一:存储在本地文件中:配置conf目录里的context.xml文件 

 

在<Context>节点下添加如下<Manager>节点: 

<ManagerclassName="org.apache.catalina.session.PersistentManager" > 

    debug=0 

    saveOnRestart="true" 

    maxActiveSession="-1" 

    minIdleSwap="-1" 

    maxIdleSwap="-1" 

    maxIdleBackup="-1" 

    <StoreclassName="org.apache.catalina.session.FileStore"directory="../session" /> 

</Manager> 

 

形式二:存储在数据库中配置store节点 

<StorecalssName="org.apache.catalina.JDBCStore" driverName="com.mysql.jdbc.Driver"

connectionURL="jdbc:mysql://localhost/session?usename=xxx&password=xxx"

sessionTable="session"sessionIdCol="session_id" sessionDataCol="session_data" 

sessionValidCol="sessionValid"sessionMaxInactiveCol="maxInactive" 

sessionLastAccessedCol="lastAccess"sessionAppCol="appName" checkInterval="60"debug="99" />  

className:Session的管理类,tomcat将会通过定义的接口来应用该类生成的对象。 

debug:Session管理器的跟踪级别。 

saveOnRestart:(true/false)配置服务重启工程中对session的处理,若为true,则关闭前把有效的session保存,启动后重新载入 

maxActiveSession:活动状态Session的最大数,为-1时则不限制,否则Session Manager将会把超出的Session对象转移到Session Store中。 

minIdleSwap:Session不活动的最短时间,超过该时间,SessionManager 可能会把该Session对象转移到Session Store中,单位为秒。 

maxidleSwap:Session不活动的最长时间,超过该时间,SessionManager 将会把该Session对象转移到Session Store中,该Session将不在内存中。 

maxidleBackup:Session不活动的最长时间,超过该时间,Session Manager 将会把该Session对象备份到Session Store中,但该Session对象依然存在内存中。 

<Store>指定实现持久化的类和Session存放的文件位置,如该例子中指定的类是:org.apache.catalina.session.FileStore,而Session对象存放的目录则是tomcat根目录下的session文件夹(当然自己创建) 

 

 

记下在复制session中遇到的一个异常: 

IOException while loading persistedsessions: java.io.WriteAbortedException 

原来要让session存储的类没有序列化引起io异常在类后面实现Serializable接口(implements  java.io.Serializable  ) 

 

序列化:java.io.Serializable

序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间. 

原因就在这里序列化是将对象转换为容易传输的格式的过程所以session序列化才能更好的传输和存储 

不只是session 要存储一个对象保存成文件都需要序列化。 

发布评论

分享到:

IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

web.xml中classpath:和classpath*的区别讲解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。