对 于一个企业级应用而言,Session对象的管理十分重要。Sessio对象的信息一般情况下置于服务器的内存中,当服务器由于故障重启,或应用重新加载 时候,此时的Session信息将全部丢失。为了避免这样的情况,在某些场合可以将服务器的Session数据存放在文件系统或数据库中,这样的操作称为 Session对象的持久化。Session对象在持久化时,存放在其中的对象以序列化的形式存放,这就是为什么一般存放在Session中的数据需要实 现可序列化接口(java.io.Serializable)的原因了。

当一个Session开始时,Servlet容器会为Session创建一个HttpSession对象。Servlet容器在某些情况下把这些 HttpSession对象从内存中转移到文件系统或数据库中,在需要访问 HttpSession信息时再把它们加载到内存中。

实现:

要完成session持久化,存放在session里的对象必须要实现java.io.Serializable 接口。

Session的持久化是由Session Manager来管理的。Tomcat提供了两个实现类:

org.apache.catalina.session.StandardManager  (默认)

org.apache.catalina.session.PersistentManager

下面分别就StandardManager和PersistentManager两种实现进行介绍。

配置:

Tomcat默认是已经启用持久化配置,若要禁用持久化功能,则只需要在<Context>节点里配置

<Manager pathname="" />;

持久化配置可进行全局配置和针对某一站点进行配置。全局配置需要在cof文件夹context.xml的

<Context>节点中配置<Manager>,若要针对某一站点配置则需要在cof文件夹server.xml的<Host><Context>

节点中添加<Manager>配置。

1.StandardManager

StandardManager是默认的Session Manager。它的实现机制为:当Tomcat服务器关闭或重启,或者Web应用被重新加载时,会对在内存中的HttpSession对象进行持久化, 并把它们保存到文件系统中,默认的文件为<CATALINA_HOME>/work/Catalina/hostname/ applicationname/SESSIONS.ser。

<Manager

className=”org.apache.catalina.session.StandardManager”

debug=”0”

maxInactiveInterval=”-1″

/>

注:如果突然终止该服务器,则所有会话都将丧失,因为StandardManager没有机会实现存盘处理。

2.PersistentManager

PersistentManager能够把Session对象保存到Session Store中,它提供了比 StandardManager更为灵活的Session管理功能,它具有以下功能:

对内存中的HttpSession对象进行持久化,把它们保存到Session Store中。

具有容错功能,可以及时把Session备份到Session Store中,当Tomcat服务器意外关闭后再重启时,可以从Session Store中恢复Session对象。

可以灵活控制在内存中的Session数目,将部分Session转移到Session Store中。

通过使用Store,将内存中的session备份到文件或数据库中。当备份一个session对象时,该session对象会被复制到存储器中,而原对象仍然留在内存中。因此如果服务器崩溃,就可以从存储器中获取活动的session对象。当session被换出时,他会被移动到存储器中,因为当前活动的session对象超过了上限值,或者session对象闲置了过长时间。换出session节省内存空间。

Tomcat实现持久化Session Store的接口为org.apache.Catalina.store,目前提供了两个实现这一接口的类,即 org.apache.Catalina.FileStore和org.apache.Catalina.JDBCStore。

实现配置PersistentManager大多是两种形式

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

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

<Manager className="org.apache.catalina.session.PersistentManager" 
    debug="0"
    saveOnRestart="false"
    maxActiveSession="-1"
    minIdleSwap="-1"
    maxIdleSwap="-1"
    maxIdleBackup="-1">
    <Store className="org.apache.catalina.session.FileStore" directory="../session" />
</Manager>

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

<Store

calssName="org.apache.catalina.JDBCStore"

driverName="com.mysql.jdbc.Driver" 
connectionURL="jdbc:mysql://localhost/tomsessionDB?user=root&password=" 
sessionTable="tomcat_session"

sessionIdCol="session_id"

sessionDataCol="session_data" 
sessionValidCol="session_valid"

sessionMaxInactiveCol="max_inactive" 
sessionLastAccessedCol="last_access"

sessionAppCol="app_name"

checkInterval="60"

debug="99" />

参数说明:

maxActiveSessions-可处于活动状态的session数,default -1 不限制

checkInterval -检查session是否过期的时间间隔,default 60s

saveOnRestart-服务器关闭时,是否将所有的session保存到文件中;
minIdleSwap/maxIdleSwap-session处于不活动状态最短/长时间(s),sesson对象转移到File Store中;(-1表示没有限制)
maxIdleBackup-超过这一时间,将session备份。(-1表示没有限制)

directory-文件存储位置work\Catalina\host name\web app\session\文件名.session

可能出现的问题:

1、

严重: Cannot serialize session attribute '/test/ip/testAction!send.action for session 1B2631B649053493F0C787FB62917E3A.tomcatA 
严重:   storing attribute '/test/ip/testAction!send.action' with value NOT_SERIALIZED

也就是说程序在运行的时候会把访问路径放到session中,但这个数据是没有序列化过的,导致反序列化的时候出错。

2、
启动的tomcat在启动的时候警告:
警告: Manager [ org.apache.catalina.session.PersistentManager@1cc5d23] does not implement ClusterManager, addition to cluster has been aborted.

在关闭和重启Tomcat 5时, tomcat 会试图 serialize存在的session资源. 如果 sessions中相关的对象没有实现 serializable 接口, 就会出现Cannot serialize session attribute XXX  for  异常.

如果你不想看到该异常, 也不想保存session. 那么你可以在项目部署描述文件中(如. test.xml,)(instead of just exploding the war)  的  <Context> tags中间 加上 : 
<Manager className="org.apache.catalina.session.PersistentManager" 
saveOnRestart="false"/> 
这样 tomcat 在关闭的时候就不会保存session资源了.

你也可以在server.xml中指定上面的值. 这也所有的程序都使用这个设置了.

Tomcat实现Session对象的持久化原理及配置方法介绍相关推荐

  1. 频谱仪使用方法图解_地暖分水器原理及使用方法介绍,图解

    地暖分水器是地暖运转不可缺少的部件,我们使用地暖的时候,可以利用地暖分水器来控制地暖中的冷暖水.贝贝猫商城来为大家介绍一下地暖分水器. 地暖分水器原理及使用方法介绍 1. 第一次使用地暖分水器的时候, ...

  2. pap认证要交换几次报文_华为HCIA认证RS路由与交换 —— 链路状态协议OSPF PPP原理与配置方法详解...

    本文讲述了华为HCIA认证R&S路由与交换 -- 链路状态协议OSPF & PPP原理与配置方法.分享给大家供大家参考,具体如下: 文章目录 链路状态路由协议--OSPF 开放式最短路 ...

  3. 思科SPCCIE必考QOS流量整形traffic shaping原理及配置方法-ielab网络实验室

    思科SPCCIE必考QOS流量整形traffic shaping原理及配置方法-ielab网络实验室 流量整形(traffic shaping)典型作用是限制流出某一网络的某一连接的流量与突发,使这类 ...

  4. java实现k 近邻算法_K近邻算法哪家强?KDTree、Annoy、HNSW原理和使用方法介绍

    1.什么是K近邻算法 K近邻算法(KNN)是一种常用的分类和回归方法,它的基本思想是从训练集中寻找和输入样本最相似的k个样本,如果这k个样本中的大多数属于某一个类别,则输入的样本也属于这个类别. 关于 ...

  5. redis介绍以及使用 ppt_光纤收发器的工作原理以及使用方法介绍

    关于光纤收发器的工作原理以及使用方法这块,在这里飞畅科技的小编做了专门的整理,首先,我们来了解下什么是光纤收发器,光纤收发器是一种将短距离的双绞线电信号和长距离的光信号进行互换的以太网传输媒体转换单元 ...

  6. Linux网络深入DHCP、FTP原理和配置方法(详细图解)

    Linux网络DHCP.FTP原理和配置 一.DHCP服务 1.了解DHCP服务 2.使用DHCP的好处 3.DHCP的分配方式 4.DHCP的租约过程 1.客户机请求IP地址 2.服务器响应 3.客 ...

  7. MySQL主从复制的原理及配置方法(比较详细)

    MySQL 的数据库的高可用性的架构大概有以下几种:集群,读写分离,主备.而后面两种都是通过复制来实现的.下面将简单介绍复制的原理及配置,以及一些常见的问题 一.复制的原理 MySQL 复制基于主服务 ...

  8. 光纤收发器的原理及应用_光纤收发器的工作原理及使用方法介绍

    关于光纤收发器的工作原理以及使用方法这块,在这里飞畅科技的小编做了专门的整理,首先,我们来了解下什么是光纤收发器,光纤收发器是一种将短距离的双绞线电信号和长距离的光信号进行互换的以太网传输媒体转换单元 ...

  9. OSPF协议原理与配置方法

    一.OSPF协议原理 OSPF是一种基于链路状态的路由协议,它从设计上就保证了无路由环路.它支持区域的划分,区域内部的路由器使用SPF最短路径算法保证了区域内部的无环路.同时它还利用区域间的连接规则保 ...

  10. LVS负载均衡调度原理及配置方法

    Ref 参考写在前面,基本都是把需要的重点用自己的话摘抄下来方便自己以后看懂,原文写的更好. https://www.kancloud.cn/noahs/linux/1540462 http://ww ...

最新文章

  1. MSVCRTD.lib(crtexe.obj) : error LNK2019
  2. PostgreSQL数据库设置远程连接
  3. python嵌入式系统开发_Python在开发实时嵌入式系统中的作用
  4. (45)FPGA面试技能提升篇(Hyperlink接口)
  5. 电影《长津湖》上映7天票房破26亿元
  6. java栈链_java实现链栈与队列详解
  7. adb连接手机全过程(以oppo手机为例)(解决adb devices 找不到设备)
  8. scratch编程《大转盘》
  9. 怎么恢复服务器上刚刚删除的文件,怎样恢复刚刚删除的文件 详细教程分享【图解】...
  10. android air flash,FlashAir
  11. 机器学习之PCA算法的人脸图像识别-平均脸的计算(详细操作步骤)
  12. Wireshark用户使用手册系列完结篇
  13. 微信公众号官方API开发之配置服务器
  14. 《Delphi传奇》网络游戏组件安装步骤:Delphi 10.3安装DelphiX
  15. 杂记——记录一次参加华为OD研发岗位的面试过程
  16. Windons10安装RDKit
  17. android listview 导航条,Android侧边导航栏+ListView基础实践
  18. 基于深度学习的行为识别方法综述
  19. 【转载】三种证明欧拉恒等式的方法(3 methods of proving Euler's Formula )
  20. java断点上传下载_java实现多线程断点续传,上传下载 分享

热门文章

  1. Premiere Elements使用指南:键盘快捷键
  2. 用EasyRecovery怎么恢复电脑中已删除的视频
  3. 安卓平台中的动态加载技术分析
  4. 中国超算世界第一 日本拟造最快超级计算机反超
  5. [Android实例教程] 教你如何拍照+相册选择图片+剪裁图片完整实现
  6. http协议包头分发一些理解
  7. libvirt中的message bus
  8. 服务器磁盘管理 知识点
  9. 企业管理的实质和核心是人的管理
  10. 在苹果Mac上如何指定发送邮件的时间?