爲何須要持久化:
客戶端訪問了某個能開啓會話功能的資源, web服務器就會建立一個與該客戶端對應的HttpSession對象,每一個HttpSession對象都要站用必定的內存空間。若是在某一時間段內訪問站點的用戶不少,web服務器內存中就會積累大量的HttpSession對象,消耗大量的服務器內存,即便用戶已經離開或者關閉了瀏覽器,web服務器仍要保留與之對應的HttpSession對象,在他們超時以前,一直佔用web服務器內存資源。web
web服務器一般將那些暫時不活動但未超時的HttpSession對象轉移到文件系統或數據庫中保存,服務器要使用他們時再將他們從文件系統或數據庫中裝載入內存,這種技術稱爲Session的持久化。
將HttpSession對象保存到文件系統或數據庫中,須要採用序列化的方式將HttpSession對象中的每一個屬性對象保存到文件系統或數據庫中;將HttpSession對象從文件系統或數據庫中裝載如內存時,須要採用反序列化的方式,恢復HttpSession對象中的每一個屬性對象。因此存儲在HttpSession對象中的每一個屬性對象必須實現Serializable接口數據庫
Session的持久化的做用:
1.提升服務器內存的利用率,保證那些暫停活動的客戶端在會話超時以前繼續原來的會話
2,在多臺web服務器協同對外提供服務的集羣系統中,使用Session的持久化技術,某臺服務器能夠將其中發生改變的Session對象複製給其餘服務器。保證了在某臺服務器中止工做後能夠由其餘服務器來接替它與客戶端的會話
3,在一個web應用程序重啓時,服務器也會持久化該應用程序中全部HttpSession對象,保證客戶端的會話活動仍能夠繼續。apache
Tomcat使用Session Manager 類來管理Session的持久化,他提供了兩個SessionManager類
org.apache.catalina.session.StandardManager
org.apache.catalina.session.PersistentManager
StandardManager是tomcat默認使用的,在web應用程序關閉時,對內存中的全部HttpSession對象進行持久化,把他們保存到文件系統中。默認的存儲文件爲
<tomcat 安裝目錄>/work/Catalina/<主機名>/<應用程序名>/sessions.ser
PersistentManager比StandardManager更爲靈活,只要某個設備提供了實現org.apache.catalina.Store接口的驅動類,PersistentManager就能夠將HttpSession對象保存到該設備瀏覽器