Chinaorg

          于千萬(wàn)人之中,遇見(jiàn)你所遇見(jiàn)的人;于千萬(wàn)年之中,時(shí)間的無(wú)涯荒野里,沒(méi)有早一步,也沒(méi)有晚一步,剛巧趕上了
          我不去想是否能夠成功,既然選擇了遠(yuǎn)方,便只顧風(fēng)雨兼程; 我不去想,身后會(huì)不會(huì)襲來(lái)寒風(fēng)冷雨,既然目標(biāo)是地平線,留給世界的只能是背影
          posts - 20, comments - 6, trackbacks - 0, articles - 0

          導(dǎo)航

          <2006年10月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          相冊(cè)

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          Session的持久化

          Posted on 2006-10-24 21:36 chinaorg 閱讀(1574) 評(píng)論(4)  編輯  收藏

          ?

          當(dāng)一個(gè) Session 開始時(shí), Servlet 容器會(huì)為 Session 創(chuàng)建一個(gè) HttpSession 對(duì)象。 Servlet 容器在某些情況下把這些 HttpSession 對(duì)象從內(nèi)存中轉(zhuǎn)移到文件系統(tǒng)或數(shù)據(jù)庫(kù)中,在需要訪問(wèn) HttpSession 信息時(shí)再把它們加載到內(nèi)存中。

          ?

          Session 的持久化是由 Session Manager 來(lái)管理的。 Tomcat 提供了兩個(gè)實(shí)現(xiàn)類

          l???????? org.apache.catalina.session.StandardManager

          l???????? org.apache.catalina.session.PersistentManager

          ?

          1.???????? StandardManager

          Standard Manager 是默認(rèn)的 Session Manager. 它的實(shí)現(xiàn)機(jī)制為:當(dāng) Tomcat 服務(wù)器關(guān)閉或重啟,或者 web 應(yīng)用被重新加載時(shí),會(huì)對(duì)在內(nèi)存中的 HttpSession 對(duì)象進(jìn)行持久化,把它們保存到文件系統(tǒng)中,默認(rèn)的文件為:

          <CATALINA_HOME>/work/Catalina/hostname/applicationname/SESSIONS.ser

          2.???????? PersistentManager

          PersistentManager 能夠把 Session 對(duì)象保存到 Session Stor 中,它提供了比 StandardManager 更為靈活的 Session 管理功能,它具有以下功能:

          l???????? 對(duì)內(nèi)存中的 HttpSession 對(duì)象進(jìn)行持久化,把它們保存到 Session Store

          l???????? 具有容錯(cuò)功能,及時(shí)把 Session 備份到 Session Store 中,當(dāng) Tomcat 服務(wù)器意外關(guān)閉后再重啟時(shí),可以從 Session Store 中恢復(fù) Session 對(duì)象。

          l???????? 可以靈活控制在內(nèi)存中的 Session 數(shù)目,將部分 Session 轉(zhuǎn)移到 Session Store

          Tomcat 實(shí)現(xiàn)持久化 Session Store 的接口為 org.apache.Catalina.store, 目前提供了兩個(gè)實(shí)現(xiàn)這一接口的類: org.apache.Catalina.FileStore org.apache.Catalina.JDBCStore.

          下面討論如何配置 PersistentManager 以及兩種持久化 Session Store.

          ?

          配置 FileStore

          ?

          FileStore HttpSession 對(duì)象保存在一個(gè)文件中。這個(gè)文件的默認(rèn)目錄為

          <CATALINA_HOME>/work/Catalina/hostname/applicationname. 每個(gè) HttpSession 對(duì)象都會(huì)對(duì)應(yīng)一個(gè)文件,它以 Session ID 作為文件名,擴(kuò)展名為: .session.

          ?

          例:為 helloapp 應(yīng)用配置 FileStore

          Server.xml

          <!-- configure FileStore -->

          <Context path="/helloapp" docBase="helloapp" debug="0"

          reloadable="true">

          ?

          <Manager className="org.apache.catalina.session.PersistentManager" >

          debug=0;

          saveOnRestart="true"

          maxActiveSessions="-1"

          minIdleSwap="-1"

          maxIdleSwap="-1"

          maxIdleBackup="-1"

          <Store className="org.apache.catalina.session.FileStore" directory="mydir" />

          </Manager>

          ?

          </Context>

          ?

          ?

          配置 JDBCStore

          ?

          JDBCStore HttpSession 對(duì)象保存在數(shù)據(jù)為庫(kù)的一張表中。

          ?

          例: MySQL 中創(chuàng)建 Session 表的步驟,假定表的名字為 tomcat_sessions, 這張表所在的數(shù)據(jù)庫(kù)為 tomcatsessionDB.

          ?

          CREATE DATABASE tomcatsessionDB;

          Use tomcatsessionDB

          Create table tomcat_session(

          session_id? varchar(100) not null primary key,

          valid_session chart(1)not null,

          max_inactive int not null,

          last_access bigint not null,

          app_name varchar (255),

          session_data mediumblob,

          KEY kapp_name(app_name)

          };

          ?

          ?

          Server.xml

          <!-- configure JDBCStore -->

          <Context path="/helloapp" docBase="helloapp" debug="0"

          reloadable="true">

          ?

          <Manager className="org.apache.catalina.session.PersistentManager" >

          debug=99;

          saveOnRestart="true"

          maxActiveSessions="-1"

          minIdleSwap="-1"

          maxIdleSwap="-1"

          maxIdleBackup="-1"

          <Store className="org.apache.catalina.session.JDBCStore"

          driverName="com.mysql.jdbc.Driver"

          connectionURL="jdbc:mysql://localhost/tomcatsessionDB?user=dbuser;password=1234"

          sessionTable="tomcat_sessions"

          sessionIdCol="session_id"

          sessionDataCol="session_data"

          sessionValidCol="valid_session"

          sessionMaxInactiveCol="max_inactive"

          sessionLastAccessedCol="last_access"

          sessionAppCol="app_name"

          checkInterval="60"

          debug="99"

          />

          </Manager>

          ?

          </Context>

          ?

          Feedback

          # re: Session的持久化  回復(fù)  更多評(píng)論   

          2007-12-23 13:15 by panrui
          ffff

          # re: Session的持久化  回復(fù)  更多評(píng)論   

          2008-02-04 12:54 by zlgnet
          配置 JDBCStore ,為何沒(méi)有在數(shù)據(jù)庫(kù)中發(fā)現(xiàn)所存數(shù)據(jù)

          # re: Session的持久化  回復(fù)  更多評(píng)論   

          2009-02-03 00:04 by linburgh
          我也發(fā)現(xiàn)類似問(wèn)題

          # re: Session的持久化  回復(fù)  更多評(píng)論   

          2009-06-17 17:30 by 天天
          <Store className="org.apache.catalina.session.FileStore" directory="mydir" />
          directory 什么意思,mydir 又是什么?

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 邢台县| 车险| 外汇| 新田县| 醴陵市| 霍林郭勒市| 阜平县| 苗栗市| 遂平县| 涟源市| 康马县| 迁安市| 泽州县| 镇沅| 龙陵县| 贵德县| 天祝| 宝兴县| 桂阳县| 泰安市| 珲春市| 静安区| 松桃| 辉县市| 柘荣县| 浏阳市| 昌黎县| 昆明市| 滦平县| 双桥区| 克什克腾旗| 安顺市| 台南市| 廉江市| 南郑县| 建平县| 苍南县| 奉新县| 枝江市| 始兴县| 孟津县|