會話持久層

2022-12-27 22:48:05 字數 3783 閱讀 1047

當乙個會話開始時,servlet容器會為會話建立乙個httpsession物件,servlet容器在某些情況下會把這些httpsession物件從記憶體中轉移到儲存裝置中(如檔案系統或者資料庫)中,在需要訪問httpsession資訊時再把他們載入到記憶體中.

把記憶體中的httpsession物件儲存到檔案系統或資料庫,這一過程稱為會話持久化,會話的持久化有兩大好處:

1. 節約記憶體空間.假如有一萬個客戶在同時訪問某個web應用,在servlet容器中會產生一萬個httpsession物件,如果將這些物件都載入到記憶體中,將消耗大量的記憶體資源,這顯然是不可取的,因此可以把出於不活動狀態的httpsession物件轉移到檔案系統或資料庫中,這樣可以提高對記憶體資源的利用率.

2. 確保伺服器重啟後或者單個web應用程式重啟後能恢復重啟前的會話

.把httpsession儲存到檔案系統或者資料庫的方法,採用了j**a語言提供的物件序列化技術,如果把httpsession物件從檔案系統或者資料庫總恢復到記憶體中,則採用了j**a語言提供的反序列化技術.

例如,如果shopingcart類實現了介面,那麼當servlet容器持久化乙個httpsession物件時,還會持久化存放在其中的shopingcart購物車物件,當httpsession物件被重新載入到記憶體中後,存放在其中的shopingcart物件也被載入到記憶體中,因此客戶原先的所做的購物車操作仍然有效.

如果shopingcart類沒有實現介面,那麼當servlet容器持久化乙個httpsession物件時,就不會持久化放在其中的shoppingcart物件,當httpsession物件重新被載入到記憶體中後,它的shopingcart物件的資訊會丟失,一次客戶原先所做的購物操作都作廢.

如上圖所示,會話在其生命週期中,可能會在執行時狀態和持久化狀態轉換:

1. 執行時狀態:主要特徵是httpsession物件位於記憶體中,執行時狀態還包括兩個子狀態,即不活動狀態和活動狀態,所謂不活動狀態,是指在一段時間捏,出於會話狀態的客戶端一直沒有向web應用發出http請求.

所謂活動狀態,是指,在一段時間內,出於會話中的客戶端頻繁的想web應用發出各種http請求.

2. 持久化狀態:主要特徵是:httpsession物件位於永久性儲存裝置中.

會話從執行狀態到持久化狀態的過程叫做擱置(或稱為持久化),以下情況會被持久化

1. 當伺服器終止,或者個別web應用終止,web應用的會話被擱置;

2. 在會話處於不活動狀態時間太長,達到了特定的限制值;

3. web應用**於執行時的狀態的會話太多,達到了特定的限制值,部分會話被擱置.

會話從持久化狀態變為執行時狀態的過程稱為啟用(或者稱為載入),一下情況會被載入

1. 當伺服器重啟或者單個web應用重啟,web應用的會話被啟用;

2. 出於會話中的客戶端向web應用發出http請求,相應的會話就被啟用;

會話的擱置和啟用對客戶端使用者來說是透明的,當客戶端和伺服器端的乙個web應用進行會話時,客戶端感覺上會認為會話始終出於執行時狀態.

j**a servlet api並沒有為會話的持久化提供標準的介面,會話的持久化完全依賴與servlet容器的具體實現.

tomcat採用會話管理器來管理會話,相關的幫助文件的檔案路徑為:

/webapps/docs/config/

tomcat會話管理器包括兩種:

1. 類:標準會話管理器;

2. 類:提供了更多的管理會話的功能.

標準會話管理器standardmanager

standardmanager是預設的標準的會話管理器,它的實現機制為:當tomcat伺服器終止或者單個web應用被終止時,會對被終止的web應用的httpsession物件進行持久化,把它們儲存在檔案系統中.預設的檔案為:

/work/catalina/[hostname]/[applicationname]/

當tomcat伺服器重啟或者單個web應用重啟時,會啟用已經被持久化的httpsession物件.

持久化會話管理器persistentmanager

persistentmanager提供了比standardmanager更為靈活的管理會話的功能,它把存放在httpsession物件的永久性儲存裝置稱為會話具有以下功能:

1. 當tomcat伺服器關閉或者重啟,或者單個web應用被重啟時,會對web應用的httpsession物件進行持久化,把她們儲存到會話store中;

2. 具有容錯功能,及時把httpsession物件備份到會話store中,當tomcat伺服器以外關閉或者再重啟時,可以從會話store中恢復到httpsession中.

3. 可以靈活的控制記憶體中的httpsession物件的數目,將部分httpsession物件轉移到會話store中.

tomcat中的會話store的介面為目前提供了兩個實現這一介面的類:

1. 把httpsession物件儲存在乙個檔案中;

2. 把httpsession物件儲存在資料庫的一張表中.

下面來介紹如何配置persistentmanager及兩種會話store;

1. 配置filestore

filestore將httpsession物件儲存在乙個檔案中,這個檔案的預設目錄為:/work/catalina/[hostname]/[applicationname].每個httpsession物件都會對應乙個檔案,它以session id作為檔名,擴充套件名為.

session

假如以j**amail應用配置filestore,應該在j**amail/meta-inf/檔案中加入元素:

s**eonrestart="true"

maxactivesession="10"

minidleswap="60"

maxidleswap="120"

maxidlebackup="180"

maxinactiveinterval="300">

元素專門用於配置會話管理器,如果採用persistentmanager,那麼還應該配置子元素,以上子元素指定了會話store的實現類和存放會話檔案的目錄.元素的屬性描述參見下表:

元素的屬性

通過瀏覽器訪問j**amail應用的在進入中,把使用者名稱儲存在httpsession物件中,這時通過tomcat的管理平台手動終止j**amail應用,persistentmanager會把當前的會話儲存到乙個檔案中,檔案以session id命名,檔案路徑為:

再重啟j**amail應用,然後在同乙個瀏覽器中從剛才的頁面到頁面,則會發現maillogin頁面顯示原來的session id和使用者名稱,這是因為persistentmanager從會話檔案中重新載入了原來的httpsession物件.

2. 配置jdbcstore

jdbcstore將httpsession物件儲存在資料庫的一張表中,這張表中的字段描述引數見下表;

存放httpsession物件的表的結構

例如採用mysql資料庫,建立資料庫tomcatsessiondb,然後建立表tomcat_sessions表,sql命令如下:

create database tomcatsessiondb;

use tomcatsessiondb;

create table tomcat_sessions(

session_id varcher(100) not null primary key,

valid_session char(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)

ActiveMQ持久化訊息

1 前言 a 持久化為檔案 這個你裝activemq時預設就是這種,只要你設定訊息為持久化就可以了。涉及到的配置和 有 level,b 持久化為mysql 你首先需要把mysql的驅動放到activemq的lib目錄下,我用的檔案名字是 接下來你修改配置檔案 在配置檔案中的broker節點外增加 從...

築牢根基持久續航

全市 2013年 春天行動 先進交流材料學習有感 通過參加2013年全市 春天行動 總結表彰會議,反覆學習先進交流材料,我深有觸動,每乙個鮮活案例的背後都藏著其成功的必然理由,每乙個先進典型的背後都對映出乙個聰慧勤勞務實的身影。從這些先進事例中學到了很多可以借鑑的經驗,也從這些先進的案例中看到了自身...

個品會話術

邀請鋪墊一 女士 先生,您好。我是 請問您現在講話方便嗎?是這樣的,在公司客戶服務節的評選活動中,我有幸被公司授予本年度 國壽最佳服務典範 殊榮,為了表彰先進,公司特別為我舉辦一場個人專場品牌會,我可以邀請我的生命中最重要的十五位嘉賓朋友前來,您作為我的vip客戶,非常希望您能來見證我榮耀的時刻,同...