1、Catalina 通过一个 Session 管理器的组件来管理建立的Session 对象
- 该组件由 org.apache.catalina.Manager 接口表示
- Session 管理器必须与一个 Context 关联
- Session 管理器负责,创建、更新、销毁 Session 对象
- 当有请求到来时,会返回一个有效的Session 对象
默认情况下,Session 管理器会将Session 对象放入内存中
- 也可以持久化,存入数据库中或文件存储器中
2、Session 对象
- 在Servlet 编程中,Session 由 javax.servlet.http.HttpSession 接口表示
- tomcat 中,由 org.apache.catalina.session 包下的StandardSession 类
- 实际使用中,StandardSessionFacade 外观类
- Session接口是做外 Catalina 内部的外观类使用的
StandardSession 类
- 实现了 javax.servlet.http.HttpSession 接口
- 实现了 org.apache.catalina.Session 接口
- 实现了 Serializable 接口
- 如下是比较重要的私有化变量
StandardSessionFacade 类
- 为了传递Session 对象给serlvet 实例,其实传递的是外观类
- 仅仅实现了 HttpSession 接口
- 对方问做了限制
3、Manager
- Session 管理器是Manager 接口的实例
- org.apache.catalina.session.ManagerBase 工具类
- 该类提供了常见功能的实现
- ManagerBase 有俩直接子类:StandardManager 和 PersistentManagerBase
StandardManager
- Catalina 运行时,StandardManager 将Session 对象存入内存
- Catalina 关闭时,所有session 存入到一个文件
PersistentManagerBase
- 有一类session管理器会将session 对象存储到辅助存储器
- PersistentManagerBase 是这种管理器的基类
Manager 接口
ManagerBase 类
- Context 容器的所有Session 活动对象,存入map中
StandardManager 类
- 是Manager 接口的标准实现
- 该类实现了 LifeCycle 接口,这样就可以由与其相关的 Context 容器启动和关闭
- Session 还要销毁那些已经失效的Session对象
PersistentManagerBase 类
- 所有持久化Session 管理器的父类
- 具有备份和换出Session 对象的任务
换出:
- 当Session 对象数量超出 maxActeSessions 所指的上限时
- 或者闲置了过长时间时
- 既然Session 对象可以被换出,所以查找时内存中找不到,就会去存储器查找
备份:
- 仅仅会备份那些空闲时间超过 maxIdleBackUp 指定的值得session 对象
PersistentManager 类
- 继承自PersistentManagerBase 类
- 并没多添加其他方法,只是多了两个属性
DistributedManager 类
- 继承自PersistentManagerBase 类
- 用于两个或多个节点集群环境
- 集群环境中,必须使用DistributedManager 作为session管理器,支持复制session对象(该类主要功能)
- 为了实现复制session对象的目的,创建和销毁Session对象时,DistributedManager会向其他节点发送消息
为了与集群中其他节点 发送接收消息
- org.apache.catalina.clust 包中提供了一些可供使用的工具类
- ClusterSender 向其他节点发送消息
- ClusterReceiver 接收其他节点发送的信息
3、存储器
- 存储器是实现了 org.apache.catalina.Store 接口的实例
- 是为Session 管理器的Session 对象提供持久化存储器的一个组件
- Store 接口类结构图
StoreBase 类
- 一个抽象类,提供基本功能
- 两个直接子类,FileStore 类和 JDBCStore 类