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

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值