利用session開發購物車

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相同。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章