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

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

JAVA培訓(xùn)之HttpSession第一例

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

通過(guò)HttpSession入門(mén)知識(shí)的學(xué)習(xí),我們對(duì)HttpSession有了一定的了解。為了更深入的學(xué)習(xí)HttpSession,掌握其功能,下面我們來(lái)練習(xí)一個(gè)案例,具體如下所示:
首先,我們對(duì)本案例進(jìn)行功能分析,在一個(gè)jsp頁(yè)面中向session域中保存數(shù)據(jù),然后在另一個(gè)jsp頁(yè)面中從session域中獲取數(shù)據(jù)。具體步驟如下所示:
(1)創(chuàng)建一個(gè)web應(yīng)用,Example21,在該應(yīng)用下的WebRoot目錄下新建一個(gè)jsp頁(yè)面,名稱(chēng)為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頁(yè)面,名稱(chēng)為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ù)器,在瀏覽器端訪問(wèn):http://localhost:8080/Example21/save.jsp,將數(shù)據(jù)存儲(chǔ)在session域中,然后再訪問(wèn)get.jsp,瀏覽器顯示結(jié)果如圖1-1所示:

圖1-1 瀏覽器顯示結(jié)果
由圖1-1可知,在訪問(wèn)save.jsp時(shí)確實(shí)將數(shù)據(jù)保存在了session域中。這時(shí),如果打開(kāi)一個(gè)新的窗口再次訪問(wèn)get.jsp,session域中的數(shù)據(jù)能夠取出來(lái)嗎?
(4)打開(kāi)一個(gè)新的瀏覽器窗口,之前的窗口不關(guān)閉,在新窗口中再次訪問(wèn)get.jsp,瀏覽器顯示結(jié)果如圖1-2所示:

圖1-2 瀏覽器顯示結(jié)果
圖1-2中也能從session域中獲取數(shù)據(jù),原因是我們說(shuō)過(guò)session是依賴(lài)于Cookie的,我們?cè)?a >Cookie的路徑和域中曾經(jīng)看到過(guò)一個(gè)名字為JSESSIONID的Cookie,這個(gè)cookie的過(guò)期時(shí)間就是瀏覽器關(guān)閉該cookie就是消失,剛才在新的窗口中訪問(wèn)get.jsp時(shí),之前的窗口并沒(méi)有關(guān)閉,那么JSESSIONID這個(gè)cookie就仍然存在于內(nèi)存中,所以第二次訪問(wèn)時(shí)能夠找到session,從而可以從session中取出數(shù)據(jù)。大家看到這里可能還有一些不明白,我們會(huì)在后面的session原理中詳細(xì)說(shuō)明。
(5)選擇圖1-2中的工具欄選項(xiàng)中的【文件】,在其下拉選項(xiàng)中選擇【新建會(huì)話】,如圖1-3所示:

圖1-3新建一個(gè)會(huì)話
(6)點(diǎn)擊圖1-3中的“新建會(huì)話“,就打開(kāi)一個(gè)新的會(huì)話,然后再次訪問(wèn)get.jsp,瀏覽器顯示結(jié)果如圖1-4所示:

圖1-4 瀏覽器顯示結(jié)果
圖1-4中,輸出null,表明沒(méi)有從session中獲取到數(shù)據(jù)。新建會(huì)話,表示重新開(kāi)啟一次會(huì)話,那么服務(wù)器會(huì)重新創(chuàng)建一個(gè)session對(duì)象,所以在get.jsp頁(yè)面中通過(guò)request.getSession()獲取到的session就是新創(chuàng)建的session,該session中并沒(méi)有存放數(shù)據(jù),所以才獲取不到。
(7)在IE瀏覽器中再次訪問(wèn)save.jsp,往session中存放數(shù)據(jù),然后再打開(kāi)谷歌瀏覽器訪問(wèn)get.jsp,觀察是否能從session中獲得數(shù)據(jù),瀏覽器顯示結(jié)果如圖1-5所示:

圖1-5 谷歌瀏覽器顯示結(jié)果
圖1-5中,訪問(wèn)get.jsp沒(méi)有獲取到session中的數(shù)據(jù),原因是:session是依賴(lài)于Cookie,而Cookie是不能跨瀏覽器的,也就是說(shuō)使用IE瀏覽器訪問(wèn)save.jsp,服務(wù)器創(chuàng)建一個(gè)session對(duì)象,由于Cookie不能跨瀏覽器,所以使用谷歌瀏覽器訪問(wèn)時(shí),服務(wù)器會(huì)創(chuàng)建另一個(gè)session對(duì)象,因此谷歌瀏覽器訪問(wèn)get.jsp不能獲取到上一個(gè)session中的數(shù)據(jù)。

本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://oisangadgets.com/javaee
0 分享到:
和我們?cè)诰€交談!