一、Catalina 經過一個 Session 管理器的組件來管理創建的Session 對象java
- 該組件由 org.apache.catalina.Manager 接口表示
- Session 管理器必須與一個 Context 關聯
- Session 管理器負責,建立、更新、銷燬 Session 對象
- 當有請求到來時,會返回一個有效的Session 對象
默認狀況下,Session 管理器會將Session 對象放入內存中數據庫
二、Session 對象apache
- 在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 類tomcat
- 爲了傳遞Session 對象給serlvet 實例,其實傳遞的是外觀類
- 僅僅實現了 HttpSession 接口
- 對方問作了限制
三、Managersession
- Session 管理器是Manager 接口的實例
- org.apache.catalina.session.ManagerBase 工具類
- 該類提供了常見功能的實現
- ManagerBase 有倆直接子類:StandardManager 和 PersistentManagerBase
StandardManager工具
- Catalina 運行時,StandardManager 將Session 對象存入內存
- Catalina 關閉時,全部session 存入到一個文件
PersistentManagerBase對象
- 有一類session管理器會將session 對象存儲到輔助存儲器
- PersistentManagerBase 是這種管理器的基類
Manager 接口blog
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 接收其餘節點發送的信息
三、存儲器
- 存儲器是實現了 org.apache.catalina.Store 接口的實例
- 是爲Session 管理器的Session 對象提供持久化存儲器的一個組件
StoreBase 類
- 一個抽象類,提供基本功能
- 兩個直接子類,FileStore 類和 JDBCStore 類