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