1. 程式人生 > >Tomcat實現Session物件的持久化原理及配置方法介紹

Tomcat實現Session物件的持久化原理及配置方法介紹

    當一個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>節點: