Chinaunix首页 | 论坛 | 博客
  • 博客访问: 409861
  • 博文数量: 114
  • 博客积分: 7010
  • 博客等级: 少将
  • 技术积分: 1395
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-05 17:54
文章分类

全部博文(114)

文章存档

2011年(2)

2009年(1)

2008年(111)

我的朋友

分类: Java

2008-07-09 18:53:05

昨天我们已经实现了在页面上显示数据库表中所有书籍信息的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>

现在我们已经实现也将物品添加至购物车中  而且给了用户两种选择:继续购物和结账

下次代码继续吧 嘿嘿

阅读(986) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~