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