1.開發購物車,若用戶挑選多個商品,可以將物品添加到集合中:
<body>
<%
ArrayList books=new ArrayList();
//購物車添加
books.add("三國演義");
books.add("西遊記");
books.add("水滸傳");
%>
購物車內容爲:
<HR>
<%
//顯示內容爲:
for(int i=0;i<books.size();i++){
String book=(String)books.get(i);
out.println(book+"<BR>");
}
%>
</body>
2.需要增加一個購物車功能,添加一個鏈接,單擊則進入:
cart2_1.jsp:
<body>
<%
ArrayList books=new ArrayList();
//購物車添加
books.add("三國演義");
books.add("西遊記");
books.add("水滸傳");
%>
<a href="cart2_2.jsp">查看購物車</a>
</body>
cart2_2.jsp:
<body>
購物車內容爲:
<HR>
<%
ArrayList books=new ArrayList();
//顯示內容爲:
for(int i=0;i<books.size();i++){
String book=(String)books.get(i);
out.println(book+"<BR>");
}
%>
</body>
然而購物車裏什麼都沒有,是什麼原因?
實際上,在cart2_2中有一句代碼表示集合在內存中重新實例化了,不是原來的books了,所以我們得使用session內置對象,跨頁面保持的,下面用session來開發購物車:
cart3_1.jsp:
<body>
<%
ArrayList books=new ArrayList();
//購物車添加
books.add("三國演義");
books.add("西遊記");
books.add("水滸傳");
//將books放入session
session.setAttribute("books", books);
%>
<a href="cart3_2.jsp">查看購物車</a>
</body>
cart3_2.jsp:
<body>
購物車內容爲:
<HR>
<%
//從購物車中取出books
ArrayList books=(ArrayList)session.getAttribute("books");
//遍歷books
for(int i=0;i<books.size();i++){
String book=(String)books.get(i);
out.println(book+"<BR>");
}
%>
</body>
sessionLost.jsp:
<body>
<form action="sessionLost.jsp" method="post">
請您輸入書本:<input name="book",type="text">
<input type="submit",value="添加到購物車">
</form>
<HR>
<%
//向session中放入一個集合對象
ArrayList books=new ArrayList();
session.setAttribute("books", books);
//獲得書名
String book=request.getParameter("book");
if(book!=null){
book=new String(book.getBytes("ISO-8859-1"),"utf-8");
//將book加進去
books.add(book);
}
%>
購物車內容爲:
<HR>
<%
//遍歷books
for(int i=0;i<books.size();i++){
out.println(books.get(i)+"<BR>");
}
%>
</body>
此時購物車沒有內容,輸入三國演義提交後顯示如下:
輸入西遊記提交後發現三國演義不見了,因爲每次網頁運行,都會有一個新實例化的ArrayList放在session裏面,因此,第一次提交後放入session中的集合和第二次提交後放入session的集合不一樣。
解決辦法:只有第一次運行時才new一個ArrayList,其他時候使用session中的ArrayList。
handleSessionLost.jsp:
<body>
<form action="handleSessionLost.jsp" method="post">
請您輸入書本:<input name="book",type="text">
<input type="submit",value="添加到購物車">
</form>
<HR>
<%
//從session中獲取books,如果爲null則實例化
ArrayList books=(ArrayList)session.getAttribute("books");
if(books==null){
books=new ArrayList();
session.setAttribute("books", books);
}
//獲得書名
String book=request.getParameter("book");
if(book!=null){
book=new String(book.getBytes("ISO-8859-1"),"utf-8");
//將book加進去
books.add(book);
}
%>
購物車內容爲:
<HR>
<%
//遍歷books
for(int i=0;i<books.size();i++){
out.println(books.get(i)+"<BR>");
}
%>
</body>
我們再次輸入時發現內容保存了下來:
其實我們可能會問:客戶在訪問多個頁面時,多個頁面用到session,服務器如何保證該用戶使用的是同一個session呢?
實際上,每一個session,服務器都有一個對應的sessionId來標識它,通過“String session.getId()”可以得到當前在服務器的Id。
sessionId1.jsp:
<body>
<%
String id=session.getId();
out.println("當前sessionId爲:"+id);
%>
<HR>
<a href="sessionId2.jsp">到達下一個頁面</a>
</body>
sessionId2.jsp:
<body>
<%
String id=session.getId();
out.println("當前sessionId爲:"+id);
%>
</body>
我們發現同一個客戶訪問Id相同。