.HttpSession概述
首先,HttpSession是javax.servlet.http包下的一個接口。從名字來看,我們可以知道HttpSession與Http協(xié)議有一定的關(guān)系,但是它并不是由Http協(xié)議定義的,而是由Javaweb提供。我們可以在JavaEE api中查看它的詳細(xì)信息。
其次,HttpSession是用來進(jìn)行會話跟蹤的接口,我們之前也學(xué)過另外一個與會話相關(guān)的技術(shù)Cookie。在
Cookie介紹中我們了解到,Cookie是由Http協(xié)議制定的,在請求信息和響應(yīng)信息中分別對應(yīng)了Cookie請求頭和Set-Cookie響應(yīng)頭,并且Cookie是由服務(wù)器創(chuàng)建,保存在客戶端。而HttpSession對象也是由服務(wù)器創(chuàng)建,但是與Cookie不同的是,它保存在服務(wù)器端。
HttpSession對象是Servlet的三大域?qū)ο笾?,其他兩個域?qū)ο笫莚equest和application。application的類型是ServletContext。這三個域中,request的域范圍最小,它的域范圍是整個請求鏈,并且只在請求轉(zhuǎn)發(fā)和包含時存在;session域?qū)ο蟮挠蚍秶且淮螘?,而在一次會話中會產(chǎn)生多次請求,因此session的域范圍要比request大;application的域范圍是最大的,因?yàn)橐粋€web應(yīng)用只有唯一的一個application對象,只有當(dāng)web應(yīng)用被移出服務(wù)器或服務(wù)器關(guān)閉它才死亡,它的域范圍是整個應(yīng)用。
2.HttpSession相關(guān)知識
在HttpSession概述中,我們提到它是用來進(jìn)行會話跟蹤的接口。會話是一個用戶對服務(wù)器的多次連貫性的請求,所謂連貫性請求是指該用戶的在多次請求的過程中沒有關(guān)閉瀏覽器。而會話范圍就是指某個用戶從首次訪問服務(wù)器開始到該用戶關(guān)閉瀏覽器為止。
服務(wù)器會為每個用戶創(chuàng)建一個session對象,當(dāng)用戶關(guān)閉瀏覽器,再次打開瀏覽器訪問服務(wù)器時,服務(wù)器會為該用戶創(chuàng)建一個新的session對象。當(dāng)然,服務(wù)器不會只有一個用戶訪問,當(dāng)多個用戶訪問服務(wù)器,服務(wù)器會為創(chuàng)建多個session對象,這些session對象都保存在一個Map中,而這個Map被稱之為session緩存。當(dāng)服務(wù)器關(guān)閉,該緩存就會被清空。
session底層是依賴Cookie的,如果瀏覽器禁用Cookie則session會依賴URL重寫。詳情我們會在后面介紹。
如何獲取HttpSession對象?在服務(wù)器端,例如在Servlet中,我們通過request對象的getSession()方法獲取服務(wù)器為當(dāng)前用戶創(chuàng)建的session對象,即:HttpSession session=request.getSession()。而在jsp中,session是jsp的內(nèi)置對象,不用獲取就可以直接使用。
我們知道每一個域?qū)ο蠖紩幸韵氯齻€方法,HttpSession也不例外:
- void setAttribute(String name,Object value):向域中添加域?qū)傩裕?/li>
- Object getAttribute(String name):從域中獲取指定名稱的屬性值;
- Void removeAttribute(String name):移出域中指定名稱的域?qū)傩浴?/li>
本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://xamj520.com/javaee