session對象是java.servlet.http.HttpSession子類的對象,表示當(dāng)前的用戶會話信息。在session中保存的對象在當(dāng)前用戶連接的所有頁面中都是可以被訪問到的。
可以使用session 對象存儲用戶登錄網(wǎng)站時的信息。當(dāng)用戶在頁面之間跳轉(zhuǎn)時,存儲在session對象中的變量不會被清除。
當(dāng)用戶登錄網(wǎng)站時,系統(tǒng)會自動分配給用戶一個session。可以使用getId()方法得到該session的ID,如程序5-22.jsp所示。
案例名稱:使用ID屬性
程序名稱:5-22.jsp
<%@ page contentType="text/html;charset=GBK" %>
<HTML>
<BODY>
<%
String s = session.getId();
%>
你的session ID:<%=s%>
</BODY>
</HTML>
這個ID是唯一的,用來標(biāo)識每一個用戶,當(dāng)刷新瀏覽器的時候,這個值是不變的,結(jié)果如圖5-25所示。
圖5-25 得到session ID的值
對于session對象中,經(jīng)常用到的方法是setAttribute()、getAttribute()和removeAttribute()。分別可以對session中的對象進行存取和刪除操作。
session對象的主要用途也是保存信息,當(dāng)用戶第一次到達網(wǎng)站時,系統(tǒng)為其分配一個session。session和application一樣也使用自己的自定義屬性,如程序5-23.jsp所示。
案例名稱:使用session的自定義屬性
程序名稱:5-23.jsp
<%@ page contentType="text/html;charset=GBK" %>
<HTML>
<BODY>
<%
String str = "歡迎!";
session.setAttribute("Greeting", str);
out.print((String)session.getAttribute("Greeting"));
%>
<br><a href="5-24.jsp">下一頁</a>
</BODY>
</HTML>
首先給自定義屬性賦值,然后將該屬性值讀取并顯示出來,如圖5-26所示。
圖5-26 session的自定義屬性
單擊超級鏈接進入5-24.jsp頁面。
案例名稱:使用session的自定義屬性
程序名稱:5-24.jsp
<%@ page contentType="text/html;charset=GBK" %>
<HTML>
<BODY>
<%
out.print((String)session.getAttribute("Greeting"));
%>
<br><a href="5-24.jsp">下一頁</a>
</BODY>
</HTML>
在該頁面中沒有對session賦值,同樣也可以得到該session的值,如圖5-27所示。注意這里是通過5-23.asp文件的超級鏈接打開的該文件。如果打開一個新的瀏覽器直接執(zhí)行5-24.asp文件,就取不到值了,而application的自定義屬性則可以。
圖5-27 使用session自定義屬性
案例5-4 簡易session版購物車
利用session保存用戶選購的商品信息,本購物車程序包含3個程序。
(1)buy1.jsp:購物網(wǎng)頁一。
(2)buy2.jsp:購物網(wǎng)頁二。
(3)display.jsp:查看購物車程序。
購物網(wǎng)頁一如程序buy1.jsp所示。
案例名稱:購物網(wǎng)頁一
程序名稱:buy1.jsp
<%@ page contentType="text/html;charset=GBK" %>
<HTML><BODY>
<%
if (request.getParameter("c1") != null ){
session.setAttribute("s1", request.getParameter("c1"));
}
if (request.getParameter("c2") != null ){
session.setAttribute("s2", request.getParameter("c2"));
}
if (request.getParameter("c3") != null ){
session.setAttribute("s3", request.getParameter("c3"));
}
%>
各種肉大甩賣,一律十塊:<br>
<FORM METHOD="POST" action="buy1.jsp">
<p><input type="checkbox" name="c1" value="豬肉">豬肉</p>
<p><input type="checkbox" name="c2" value="牛肉">牛肉</p>
<p><input type="checkbox" name="c3" value="羊肉">羊肉</p>
<p><input type="submit" value="提交" name="B1">
<input type="reset" value="全部重寫" name="B2">
<a href="buy2.jsp">買點別的</a>
<a href="display.jsp">查看購物車</a> </P>
</FORM>
</BODY></HTML>
程序顯示如圖5-28所示。
圖5-28 購物網(wǎng)頁一
購物網(wǎng)頁二和上個程序類似,如程序buy2.jsp所示。
案例名稱:購物網(wǎng)頁二
程序名稱:buy2.jsp
<%@ page contentType="text/html;charset=GBK" %>
<HTML><BODY>
<%
if (request.getParameter("b1") != null ){
session.setAttribute("s4", request.getParameter("b1"));
}
if (request.getParameter("b2") != null ){
session.setAttribute("s5", request.getParameter("b2"));
}
if (request.getParameter("b3") != null ){
session.setAttribute("s6", request.getParameter("b3"));
}
%>
各種球大甩賣,一律八塊:
<form method="POST" action="buy2.jsp">
<p><input type="checkbox" name="b1" value="籃球">籃球</p>
<p><input type="checkbox" name="b2" value="足球">足球</p>
<p><input type="checkbox" name="b3" value="排球">排球</p>
<p><input type="submit" value="提交" name="x1">
<input type="reset" value="全部重寫" name="B2">
<a href="buy1.jsp">買點別的</a>
<a href="display.jsp">查看購物車</a>
</P>
</FORM>
</BODY></HTML>
程序顯示的結(jié)果如圖5-29所示。
圖5-29 購物網(wǎng)頁二
選擇幾個商品提交,程序?qū)⑸唐沸畔⒈4娴絪ession中,可以單擊“查看購物車”按鈕,結(jié)果如圖5-30所示。
圖5-30 查看購物車
顯示結(jié)果程序如程序display.jsp所示。
案例名稱:查看購物車程序
程序名稱:display.jsp
<%@ page contentType="text/html;charset=GBK" %>
<HTML><BODY>
你選擇的結(jié)果是: <center>
<%
String str = "";
if(session.getAttribute("s1") != null){
str = (String)session.getAttribute("s1");
byte b[]=str.getBytes("ISO-8859-1");
str=new String(b);
out.print(str + "<br>");
}
if(session.getAttribute("s2")!= null){
str = (String)session.getAttribute("s2");
byte b[]=str.getBytes("ISO-8859-1");
str=new String(b);
out.print(str + "<br>");
}
if(session.getAttribute("s3")!=null){
str = (String)session.getAttribute("s3");
byte b[]=str.getBytes("ISO-8859-1");
str=new String(b);
out.print(str + "<br>");
}
if(session.getAttribute("s4")!=null){
str = (String)session.getAttribute("s4");
byte b[]=str.getBytes("ISO-8859-1");
str=new String(b);
out.print(str + "<br>");
}
if(session.getAttribute("s5")!=null){
str = (String)session.getAttribute("s5");
byte b[]=str.getBytes("ISO-8859-1");
str=new String(b);
out.print(str + "<br>");
}
if(session.getAttribute("s6")!=null){
str = (String)session.getAttribute("s6");
byte b[]=str.getBytes("ISO-8859-1");
str=new String(b);
out.print(str + "<br>");
}
%> </center>
</BODY></HTML>
該程序中做了一個判斷,如果session中有值的話(不是null)就輸出到瀏覽器上。