通過
HttpSession入門知識(shí)的學(xué)習(xí),我們對(duì)HttpSession有了一定的了解。為了更深入的學(xué)習(xí)HttpSession,掌握其功能,下面我們來練習(xí)一個(gè)案例,具體如下所示:
首先,我們對(duì)本案例進(jìn)行功能分析,在一個(gè)jsp頁面中向session域中保存數(shù)據(jù),然后在另一個(gè)jsp頁面中從session域中獲取數(shù)據(jù)。具體步驟如下所示:
(1)創(chuàng)建一個(gè)web應(yīng)用,Example21,在該應(yīng)用下的WebRoot目錄下新建一個(gè)jsp頁面,名稱為save.jsp,主要代碼如例1-1所示:
例1-1 save.jsp
<body>
<h1>向session域保存數(shù)據(jù)</h1>
<%
session.setAttribute("aaa", "AAA");
%>
</body>
例1-1中,因?yàn)閟ession是jsp的內(nèi)置對(duì)象,所以可以直接使用。
(2)在WebRoot目錄下再次新建一個(gè)jsp頁面,名稱為get.jsp,主要代碼如例1-2所示:
例1-2 get.jsp
<body>
<h1>獲取session中的數(shù)據(jù)</h1>
<%
String s = (String)session.getAttribute("aaa");
%>
<%=s %>
</body>
例1-2中,先從session域中獲取數(shù)據(jù),然后再輸出到瀏覽器端。
(3)將Example21發(fā)布到Tomcat服務(wù)器中,然后啟動(dòng)服務(wù)器,在瀏覽器端訪問:http://localhost:8080/Example21/save.jsp,將數(shù)據(jù)存儲(chǔ)在session域中,然后再訪問get.jsp,瀏覽器顯示結(jié)果如圖1-1所示:
圖1-1 瀏覽器顯示結(jié)果
由圖1-1可知,在訪問save.jsp時(shí)確實(shí)將數(shù)據(jù)保存在了session域中。這時(shí),如果打開一個(gè)新的窗口再次訪問get.jsp,session域中的數(shù)據(jù)能夠取出來嗎?
(4)打開一個(gè)新的瀏覽器窗口,之前的窗口不關(guān)閉,在新窗口中再次訪問get.jsp,瀏覽器顯示結(jié)果如圖1-2所示:
圖1-2 瀏覽器顯示結(jié)果
圖1-2中也能從session域中獲取數(shù)據(jù),原因是我們說過session是依賴于Cookie的,我們?cè)?a >Cookie的路徑和域中曾經(jīng)看到過一個(gè)名字為JSESSIONID的Cookie,這個(gè)cookie的過期時(shí)間就是瀏覽器關(guān)閉該cookie就是消失,剛才在新的窗口中訪問get.jsp時(shí),之前的窗口并沒有關(guān)閉,那么JSESSIONID這個(gè)cookie就仍然存在于內(nèi)存中,所以第二次訪問時(shí)能夠找到session,從而可以從session中取出數(shù)據(jù)。大家看到這里可能還有一些不明白,我們會(huì)在后面的
session原理中詳細(xì)說明。
(5)選擇圖1-2中的工具欄選項(xiàng)中的【文件】,在其下拉選項(xiàng)中選擇【新建會(huì)話】,如圖1-3所示:
圖1-3新建一個(gè)會(huì)話
(6)點(diǎn)擊圖1-3中的“新建會(huì)話“,就打開一個(gè)新的會(huì)話,然后再次訪問get.jsp,瀏覽器顯示結(jié)果如圖1-4所示:
圖1-4 瀏覽器顯示結(jié)果
圖1-4中,輸出null,表明沒有從session中獲取到數(shù)據(jù)。新建會(huì)話,表示重新開啟一次會(huì)話,那么服務(wù)器會(huì)重新創(chuàng)建一個(gè)session對(duì)象,所以在get.jsp頁面中通過request.getSession()獲取到的session就是新創(chuàng)建的session,該session中并沒有存放數(shù)據(jù),所以才獲取不到。
(7)在IE瀏覽器中再次訪問save.jsp,往session中存放數(shù)據(jù),然后再打開谷歌瀏覽器訪問get.jsp,觀察是否能從session中獲得數(shù)據(jù),瀏覽器顯示結(jié)果如圖1-5所示:
圖1-5 谷歌瀏覽器顯示結(jié)果
圖1-5中,訪問get.jsp沒有獲取到session中的數(shù)據(jù),原因是:session是依賴于Cookie,而Cookie是不能跨瀏覽器的,也就是說使用IE瀏覽器訪問save.jsp,服務(wù)器創(chuàng)建一個(gè)session對(duì)象,由于Cookie不能跨瀏覽器,所以使用谷歌瀏覽器訪問時(shí),服務(wù)器會(huì)創(chuàng)建另一個(gè)session對(duì)象,因此谷歌瀏覽器訪問get.jsp不能獲取到上一個(gè)session中的數(shù)據(jù)。
本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://m.fskzgqt.cn/javaee