昨天我们已经实现了在页面上显示数据库表中所有书籍信息的book.jsp 当用户点击时 它会链接到显示图书详细信息的 displayBook.jsp页面中,并且把isbn作为参数 传递过去,这样在displayBook.jsp页面中就可以根据isbn来取出相应的图书详细信息 以供用户点击放入购物车中...
一:displayBook.jsp
<%@ page contentType="text/html; charset=GBK" import="java.util.*,ShopBean.*,ShopDB.*" %> <% //从session中读取对象
List titles = (List)session.getAttribute("titles"); int size = titles.size(); BookBean book = null; String isbn = request.getParameter("isbn"); int i = 0; while(i<size) { book = (BookBean)titles.get(i); if(isbn.equals(book.getIsbn())) { //保存书籍到session对象中
session.setAttribute("bookToAdd",book); //isbn匹配当前的书籍,退出循环
break; } i++; } %> <html> <head> </head> <body>
<table style="TEXT-ALIGN:center" width="590"> <tbody> <tr> <td colspan="5"> <h2><%=book.getTitle() %></h2> </td> </tr> <tr> <td rowspan="5"> <img alt="" src="images/<%=book.getImageFile() %>" /> </td> <td align="left">书籍编号:</td> <td align="left"><%=book.getIsbn() %></td> </tr> <tr align="left"> <td align="left">价格:</td> <td align="left"><%=book.getPrice() %></td> </tr> <tr align="left"> <td>版本号:</td> <td><%=book.getEditionNumber() %></td> </tr> <tr align="left"> <td>版权:</td> <td><%=book.getCopyright() %></td> </tr> <tr align="left"> <td><form action="AddBookToCart" method="POST"> <input type="submit" value="放入购物车" /> </form></td> <td> <form action="viewCart.jsp" method="GET"> <input type="submit" value="查看购物车" /> </form> </td> </tr> </tbody> </table>
</body> </html>
|
这样,在displayBook.jsp中 就可以根据isbn的值动态的显示用户所选书籍的详细信息了,并且为用户提供两种选择:刚入购物车和查看购物车
二:为了能够保存用户购买商品的信息,我们创建一个CartItemBean.java 它包括书籍本身的信息(图书名称,图书价格等)和购买书籍的数量
CartItemBean.java
package ShopBean; import java.io.Serializable;
public class CartItemBean implements Serializable {
private BookBean book;// 当前书籍 private int quantity;//当前车中的数量 public CartItemBean(BookBean bookToAdd,int number) { book = bookToAdd; quantity = number; } //返回book public BookBean getBook() { return book; }
//设定数量 public void setQuantity(int number) { quantity = number; }
//返回数量 public int getQuantity() { return quantity; } }
|
让我们再回想一下:当我们在商场购物时,为了方便商品的拿取,我们都会首先把商品放入购物车中,在电子商城中我们也采用类似的方法,来处理商品的存取,我们使用集合类中的Map来保存用户购买的商品 他们之间的关系为:有书籍类(BookBean.java)和购买书籍的数量构成了购物车内商品信息的描述类(CartItemBean.java ),再把CartItemBean类的对象存放到HashMap中,其中HashMap中的Key值是书籍的编号isbn,value值是CartItemBean类对象,然后把保存了书籍信息的HashMap对象保存到session中 这样我们就可以操作session中的数据来实现不同用户的购买功能
三:用servlet实现把用户购买的物品放入购物车内,当在displayBook.jsp中用户选择放入购物车中时,程序所要完成的任务就是把当前信息添加到Map中去 再把Map保存在session中,这些工作由servlet AddBookToCart完成 代码如
package ShopServlet;
import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; import ShopBean.BookBean; import ShopBean.CartItemBean;;
public class AddBookToCart extends HttpServlet { private static final String CONTENT_TYPE = "text/html; charset=GBK";
//Initialize global variables public void init() throws ServletException { }
//Process the HTTP Get request public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); response.setContentType(CONTENT_TYPE); PrintWriter out = response.getWriter();
}
//Process the HTTP Post request public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(false); RequestDispatcher dispatcher; //如果 session不存在,则转向books.jsp if(session == null) { dispatcher = request.getRequestDispatcher("books.jsp"); dispatcher.forward(request,response); } BookBean book = (BookBean)session.getAttribute("bookToAdd"); // 取出购物车添加的书籍 Map cart = (Map)session.getAttribute("cart"); //如果购物车不存在,则创建购物车 if(cart == null) { cart = new HashMap(); //将购物车放入session中 session.setAttribute("cart",cart); } //判断书籍是否在购物车中 CartItemBean cartItem = (CartItemBean)cart.get(book.getIsbn()); //如果书籍在 则更新其数量 //否则,创建一个条目到Map中 if(cartItem!=null) cartItem.setQuantity(cartItem.getQuantity()+1); else cart.put(book.getIsbn(),new CartItemBean(book,1)); dispatcher = request.getRequestDispatcher("viewCart.jsp"); dispatcher.forward(request,response); }
//Clean up resources public void destroy() { } }
|
四:现在用jsp页面显示购物车列表 viewCart.jsp
<%@ page contentType="text/html; charset=GBK" import="java.util.*,java.text.*,ShopBean.*,ShopServlet.*" %> <% Map cart = (Map)session.getAttribute("cart"); double total = 0;
if(cart == null||cart.size() == 0) out.println("购物车当前为空 "); else { //创建用于显示内容的变量
Set cartItems = cart.keySet(); Object[] isbn = cartItems.toArray(); BookBean book; CartItemBean cartItem; int quantity; double price,subtotal; %> <html> <head> </head> <body> <table cellspacing="0" cellpadding="0" width="590" border="1"> <thead><tr align="center"> <th>酷衣名称</th> <th>数量</th> <th>价格</th> <th>小计</th> </tr></thead> <% int i = 0; while(i< isbn.length) { //计算总和
cartItem = (CartItemBean)cart.get(isbn[i]); book = cartItem.getBook(); quantity = cartItem.getQuantity(); price = book.getPrice(); subtotal = quantity*price; total += subtotal; i++; %> <tr> <td><%=book.getTitle() %></td> <td align="center"><%=quantity %></td> <td class="right"><%=new DecimalFormat("0.00").format(price) %></td> <td class="bold right"><%=new DecimalFormat("0.00").format(subtotal) %></td> </tr> <%} %> <tr> <td colspan="4" class="bold right"><b>总计:</b> <%=new DecimalFormat("0.00").format(total) %> </td> </tr> </table> <% session.setAttribute("total",new Double(total)); } %> <p><a href="books.jsp">继续购物</a></p> <form action="order.html" method="GET"> <p><input type="submit" value="结 帐" /></p> </form> </body> </html>
|
现在我们已经实现也将物品添加至购物车中 而且给了用户两种选择:继续购物和结账
下次代码继续吧 嘿嘿
阅读(983) | 评论(0) | 转发(1) |