教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

JAVA培訓(xùn)之HttpSession入門

更新時(shí)間:2016年08月17日16時(shí)48分 來(lái)源:傳智播客JAVA培訓(xùn)學(xué)院 瀏覽次數(shù):

.HttpSession概述

首先,HttpSession是javax.servlet.http包下的一個(gè)接口。從名字來(lái)看,我們可以知道HttpSession與Http協(xié)議有一定的關(guān)系,但是它并不是由Http協(xié)議定義的,而是由Javaweb提供。我們可以在JavaEE api中查看它的詳細(xì)信息。
其次,HttpSession是用來(lái)進(jìn)行會(huì)話跟蹤的接口,我們之前也學(xué)過(guò)另外一個(gè)與會(huì)話相關(guān)的技術(shù)Cookie。在Cookie介紹中我們了解到,Cookie是由Http協(xié)議制定的,在請(qǐng)求信息和響應(yīng)信息中分別對(duì)應(yīng)了Cookie請(qǐng)求頭和Set-Cookie響應(yīng)頭,并且Cookie是由服務(wù)器創(chuàng)建,保存在客戶端。而HttpSession對(duì)象也是由服務(wù)器創(chuàng)建,但是與Cookie不同的是,它保存在服務(wù)器端。
HttpSession對(duì)象是Servlet的三大域?qū)ο笾?,其他兩個(gè)域?qū)ο笫莚equest和application。application的類型是ServletContext。這三個(gè)域中,request的域范圍最小,它的域范圍是整個(gè)請(qǐng)求鏈,并且只在請(qǐng)求轉(zhuǎn)發(fā)和包含時(shí)存在;session域?qū)ο蟮挠蚍秶且淮螘?huì)話,而在一次會(huì)話中會(huì)產(chǎn)生多次請(qǐng)求,因此session的域范圍要比request大;application的域范圍是最大的,因?yàn)橐粋€(gè)web應(yīng)用只有唯一的一個(gè)application對(duì)象,只有當(dāng)web應(yīng)用被移出服務(wù)器或服務(wù)器關(guān)閉它才死亡,它的域范圍是整個(gè)應(yīng)用。

2.HttpSession相關(guān)知識(shí)

在HttpSession概述中,我們提到它是用來(lái)進(jìn)行會(huì)話跟蹤的接口。會(huì)話是一個(gè)用戶對(duì)服務(wù)器的多次連貫性的請(qǐng)求,所謂連貫性請(qǐng)求是指該用戶的在多次請(qǐng)求的過(guò)程中沒(méi)有關(guān)閉瀏覽器。而會(huì)話范圍就是指某個(gè)用戶從首次訪問(wèn)服務(wù)器開(kāi)始到該用戶關(guān)閉瀏覽器為止。
服務(wù)器會(huì)為每個(gè)用戶創(chuàng)建一個(gè)session對(duì)象,當(dāng)用戶關(guān)閉瀏覽器,再次打開(kāi)瀏覽器訪問(wèn)服務(wù)器時(shí),服務(wù)器會(huì)為該用戶創(chuàng)建一個(gè)新的session對(duì)象。當(dāng)然,服務(wù)器不會(huì)只有一個(gè)用戶訪問(wèn),當(dāng)多個(gè)用戶訪問(wèn)服務(wù)器,服務(wù)器會(huì)為創(chuàng)建多個(gè)session對(duì)象,這些session對(duì)象都保存在一個(gè)Map中,而這個(gè)Map被稱之為session緩存。當(dāng)服務(wù)器關(guān)閉,該緩存就會(huì)被清空。
session底層是依賴Cookie的,如果瀏覽器禁用Cookie則session會(huì)依賴URL重寫。詳情我們會(huì)在后面介紹。
如何獲取HttpSession對(duì)象?在服務(wù)器端,例如在Servlet中,我們通過(guò)request對(duì)象的getSession()方法獲取服務(wù)器為當(dāng)前用戶創(chuàng)建的session對(duì)象,即:HttpSession session=request.getSession()。而在jsp中,session是jsp的內(nèi)置對(duì)象,不用獲取就可以直接使用。
我們知道每一個(gè)域?qū)ο蠖紩?huì)有以下三個(gè)方法,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)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://oisangadgets.com/javaee
0 分享到:
和我們?cè)诰€交談!