(3) StandardManager:继承自ManagerBase,tomcat的默认Session管理器(不指定配置,默认使用这 个),是tomcat处理session的非集群实现(也就说是单机版的),tomcat关闭时,内存session信息会持久化到磁盘保存为 SESSION.ser,再次启动时恢复。
(4) PersistentManagerBase:继承自ManagerBase,实现了和定义了session管理器持久化的基础功能。
(5) PersistentManager:继承自PersistentManagerBase,主要实现的功能是会把空闲的会话对象(通过设定超时时间)交换到磁盘上。
(6) ClusterManager:实现了Manager接口,通过类名应该能猜到,这个就是管理集群session的管理器和上面那个 StandardManager单机版的session管理器是相对的概念。这个类定义类集群间session的复制共享接口。
(7) ClusterManagerBase:实现了ClusterManager接口,继承自ManagerBase。该类实现了session复制的基本操作。
(8) BackupManager:继承自ClusterManagerBase, 集群间session复制策略的一种实现,会话数据只有一个备份节点,这个备份节点的位置集群中所有节点都可见。这种设计使它有个优势就是支持异构部署。
(9) DeltaManager:继承自ClusterManagerBase,集群建session复制策略的一种实现,和BackupManager不同的是,会话数据会复制到集群中所有的成员节点,这也就要求集群中所有节点必须同构,必须部署相同的应用。
补充:下面再具体总结一点就是在PersistentManagerBase类中有个成员变量Store:
持久化session管理器的存储策略就是有这个Store对象定义的,这个Store的类继承结构如下:
简述:接口Store及其实例是为session管理器提供了一套存储策略,store定义了基本的接口,而StoreBase提供了基本的实现。 其中FileStore类实现的策略是将session存储在以setDirectory()指定目录并以.session结尾的文件中的。 JDBCStore类是将Session通过JDBC存入数据库中,因此需要使用JDBCStore,需要分别调用setDriverName()方法和 setConnectionURL()方法来设置驱动程序名称和连接URL。
3. Tomcat session相关的配置
从两个层面总结一下session相关的配置和设置。首先是从配置文件层面,session是有过期时间的,这个默认的过期时间是 在$catalina_home/conf/web.xml有定义的。具体的默认配置如下(默认的过期时间是30min,即30min没有访 问,session就过期了):
还有一点就是session管理如果不配置就默认使用StandardManager,但如果要配置的话可以 在$catalina_home/conf/context.xml当中指定(其中从这个配置当中可以看到session管理器是和context容器关 联的,也就说每个web应用都会有一个session管理器)具体的配置如下:
Tomcat7.x默认这个manager的配置是注释掉的。如果要指定的PersistentManager为默认管理器的话可以这么指定:
其实看到这也就发现了,其实session管理器或者Store存储策略,只要实现了相关的接口,都是可以自定义的。自己写一个配置在这里就ok了。
另外在从代码层面总结一下:session的一些配置信息是写死在代码里的,比如SessionConfig这个类就定义了一些session的设 置信息。Session在cookie中的名字是JSESSION. Session通过URL重写的方式放在path里时,键值的名字是jsessionids,具体的代码如下:
还有一点就是sessionId默认指定的长度是16个字节,这个在SessionIdGenerator当中指定:
好了,有关默认配置的就先总结这么多。
更多Tomcat相关教程见以下内容: