在我們具體了解如何使用服務(wù)器端方案解決我們的問題之前,我們還需要了解服務(wù)端小程序會話(session)的生命周期。與EJB及其他服務(wù)端實(shí)體一樣,會話在生存期中通過一個定義的狀態(tài)集運(yùn)行。下圖顯示了會話的生命周期。Servlet可在三種特定的狀態(tài)中轉(zhuǎn)換:不存在(does not exist),新建(new),非新建(not new/或使用中in-use)。
a) 會話在開始時處于不存在狀態(tài)。會話從這一狀態(tài)開始或者由于許多原因而返回到此狀態(tài)。最主要的原因就是用戶以前沒有訪問過這些狀態(tài)或者是由于用戶脫離(超時)站點(diǎn)或退出使會話被設(shè)置為無效。 b) 當(dāng)會話被建立時便會從“不存在”狀態(tài)進(jìn)入“新建”狀態(tài)。新建與非新建狀態(tài)的區(qū)分是非常重要的,因為HTTP協(xié)議不記錄狀態(tài)信息。根據(jù)servlet詳細(xì)說明書描述,在客戶端返回會話給服務(wù)端之前會話不能夠進(jìn)入非新建狀態(tài)(即從預(yù)期會話轉(zhuǎn)變?yōu)楫?dāng)前會話)。這樣在客戶端不知道或者還沒有決定加入會話時會話處于新建狀態(tài)。 c) 當(dāng)會話通過cookie或是重寫URL()返回到服務(wù)器時,會話就變?yōu)椤笆褂弥小被颉胺切陆ā睜顟B(tài)。 d) 通過各種get與set方法繼續(xù)使用會話會使其維持在“使用中”狀態(tài)。 e) 當(dāng)會話由于長時間沒有被使用而超時或顯式的被設(shè)為無效則會發(fā)生圖中所示的5以及6所標(biāo)識的轉(zhuǎn)移。不同應(yīng)用服務(wù)器用不同方式處理超時。BEA公司的WebLogic使應(yīng)用部署者能夠通過與web應(yīng)用一起打包的特殊部署描述腳本(weblogic.xml)設(shè)置會話超時的時限。