javaweb图书商城设计之购物车模块(3)

本文继续为大家分享了javaweb图书商城中购物车模块,供大家参考,具体内容如下

购物车存储

保存在session中
保存在cookie中
保存在数据库中

1、创建相关类

购物车的结构:

CartItem:购物车条目,包含图书和数量
Cart:购物车,包含一个Map

/**
 * 购物车类
 */
public class Cart {
  private Map<String,CartItem> map = new LinkedHashMap<String,CartItem>();

  /**
   * 计算合计
   * @return
   */
  public double getTotal() {
    // 合计=所有条目的小计之和
    BigDecimal total = new BigDecimal("0");
    for(CartItem cartItem : map.values()) {
      BigDecimal subtotal = new BigDecimal("" + cartItem.getSubtotal());
      total = total.add(subtotal);
    }
    return total.doubleValue();
  }

  /**
   * 添加条目到车中
   * @param cartItem
   */
  public void add(CartItem cartItem) {
    if(map.containsKey(cartItem.getBook().getBid())) {//判断原来车中是否存在该条目
      CartItem _cartItem = map.get(cartItem.getBook().getBid());//返回原条目
      _cartItem.setCount(_cartItem.getCount() + cartItem.getCount());//设置老条目的数量为,其自己数量+新条目的数量
      map.put(cartItem.getBook().getBid(), _cartItem);
    } else {
      map.put(cartItem.getBook().getBid(), cartItem);
    }
  }

  /**
   * 清空所有条目
   */
  public void clear() {
    map.clear();
  }

  /**
   * 删除指定条目
   * @param bid
   */
  public void delete(String bid) {
    map.remove(bid);
  }

  /**
   * 获取所有条目
   * @return
   */
  public Collection<CartItem> getCartItems() {
    return map.values();
  }
}
/**
 * 购物车条目类
 *
 */
public class CartItem {
  private Book book;// 商品
  private int count;// 数量

  /**
   * 小计方法
   * @return
   * 处理了二进制运算误差问题
   */
  public double getSubtotal() {//小计方法,但它没有对应的成员!
    BigDecimal d1 = new BigDecimal(book.getPrice() + "");
    BigDecimal d2 = new BigDecimal(count + "");
    return d1.multiply(d2).doubleValue();
  }

  public Book getBook() {
    return book;
  }

  public void setBook(Book book) {
    this.book = book;
  }

  public int getCount() {
    return count;
  }

  public void setCount(int count) {
    this.count = count;
  }
}

2、添加购物车条目

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
  <title>购物车列表</title>

  <meta http-equiv="pragma" content="no-cache">
  <meta http-equiv="cache-control" content="no-cache">
  <meta http-equiv="expires" content="0">
  <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  <meta http-equiv="description" content="This is my page">
  <meta http-equiv="content-type" content="text/html;charset=utf-8">
  <!--
  <link rel="stylesheet" type="text/css" href="styles.css">
  -->
<style type="text/css">
  * {
    font-size: 11pt;
  }
  div {
    margin:20px;
    border: solid 2px gray;
    width: 150px;
    height: 150px;
    text-align: center;
  }
  li {
    margin: 10px;
  }

  #buy {
    background: url(<c:url value='/images/all.png'/>) no-repeat;
    display: inline-block;

    background-position: 0 -902px;
    margin-left: 30px;
    height: 36px;
    width: 146px;
  }
  #buy:HOVER {
    background: url(<c:url value='/images/all.png'/>) no-repeat;
    display: inline-block;

    background-position: 0 -938px;
    margin-left: 30px;
    height: 36px;
    width: 146px;
  }
</style>
 </head>

 <body>
<h1>购物车</h1>
<c:choose>
  <%-- 如果没有车,或车的内容集合为0长 --%>
  <c:when test="${empty sessionScope.cart or fn:length(sessionScope.cart.cartItems) eq 0}">
    <img src="<c:url value='/images/cart.png'/>" width="300"/>
  </c:when>
  <c:otherwise>
<table border="1" width="100%" cellspacing="0" background="black">
  <tr>
    <td colspan="7" align="right" style="font-size: 15pt; font-weight: 900">
      <a href="<c:url value='/CartServlet?method=clear'/>">清空购物车</a>
    </td>
  </tr>
  <tr>
    <th>图片</th>
    <th>书名</th>
    <th>作者</th>
    <th>单价</th>
    <th>数量</th>
    <th>小计</th>
    <th>操作</th>
  </tr>

<c:forEach items="${sessionScope.cart.cartItems }" var="cartItem">
  <tr>
    <td><div><img src="<c:url value='/${cartItem.book.image }'/>"/></div></td>
    <td>${cartItem.book.bname }</td>
    <td>${cartItem.book.author }</td>
    <td>${cartItem.book.price }元</td>
    <td>${cartItem.count }</td>
    <td>${cartItem.subtotal }元</td>
    <td><a href="<c:url value='/CartServlet?method=delete&bid=${cartItem.book.bid }'/>">删除</a></td>
  </tr>
</c:forEach>

  <tr>
    <td colspan="7" align="right" style="font-size: 15pt; font-weight: 900">
      合计:${sessionScope.cart.total }元
    </td>
  </tr>
  <tr>
    <td colspan="7" align="right" style="font-size: 15pt; font-weight: 900">
      <a id="buy" href="<c:url value='/OrderServlet?method=add'/>"></a>
    </td>
  </tr>
</table>
  </c:otherwise>
</c:choose>
 </body>
</html>
public class CartServlet extends BaseServlet {
  /**
   * 添加购物条目
   * @param request
   * @param response
   * @return
   * @throws ServletException
   * @throws IOException
   */
  public String add(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    /*
     * 1. 得到车
     * 2. 得到条目(得到图书和数量)
     * 3. 把条目添加到车中
     */
    /*
     * 1. 得到车
     */
    Cart cart = (Cart)request.getSession().getAttribute("cart");
    /*
     * 表单传递的只有bid和数量
     * 2. 得到条目
     *  > 得到图书和数量
     *  > 先得到图书的bid,然后我们需要通过bid查询数据库得到Book
     *  > 数量表单中有
     */
    String bid = request.getParameter("bid");
    Book book = new BookService().load(bid);
    int count = Integer.parseInt(request.getParameter("count"));
    CartItem cartItem = new CartItem();
    cartItem.setBook(book);
    cartItem.setCount(count);

    /*
     * 3. 把条目添加到车中
     */
    cart.add(cartItem);

    return "f:/jsps/cart/list.jsp";
  }

  /**
   * 清空购物条目
   * @param request
   * @param response
   * @return
   * @throws ServletException
   * @throws IOException
   */
  public String clear(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    /**
     * 1. 得到车
     * 2. 设置车的clear
     */
    Cart cart = (Cart)request.getSession().getAttribute("cart");
    cart.clear();
    return "f:/jsps/cart/list.jsp";
  }

  /**
   * 删除购物条目
   * @param request
   * @param response
   * @return
   * @throws ServletException
   * @throws IOException
   */
  public String delete(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    /*
     * 1. 得到车
     * 2. 得到要删除的bid
     */
    Cart cart = (Cart)request.getSession().getAttribute("cart");
    String bid = request.getParameter("bid");
    cart.delete(bid);
    return "f:/jsps/cart/list.jsp";
  }
}

3、清空条目

4、删除购物车条目

5、我的购物车

top.jsp中存在一个链接:我的购物车

我的购物车直接访问/jsps/cart/list.jsp,它会显示session中车的所有条目。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java web开发之实现购物车功能

    为了方便自己以后复习,所以写的比较仔细,记录下自己的成长.  既然是做购物车,那么前提条件是首先需要一系列商品,也就是要建一个实体,这里建了一个商品表. 通过查询在浏览器上显示 基本显示已经做好了,现在进入我们的重头戏,Servlet  点击放入购物车时,将访问Servlet 购物车代码 package com.servlet; import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; im

  • java web开发之购物车功能实现示例代码

    之前没有接触过购物车的东东,也不知道购物车应该怎么做,所以在查询了很多资料,总结一下购物车的功能实现. 查询的资料,找到三种方法: 1.用cookie实现购物车: 2.用session实现购物车: 3.用cookie和数据库(购物车信息持久化)实现购物车: 分析一下这三种方法的优缺点: 1.单纯有cookie实现购物车,这样的购物车不是很理想,设想一下,如果客户端的浏览器把cookie给禁用了,这种方法就会在这里流产- 2.session中保存购物车的信息,这个只是在一个会话中可用,如果用户没有

  • javaweb图书商城设计之购物车模块(3)

    本文继续为大家分享了javaweb图书商城中购物车模块,供大家参考,具体内容如下 购物车存储 保存在session中 保存在cookie中 保存在数据库中 1.创建相关类 购物车的结构: CartItem:购物车条目,包含图书和数量 Cart:购物车,包含一个Map /** * 购物车类 */ public class Cart { private Map<String,CartItem> map = new LinkedHashMap<String,CartItem>(); /*

  • javaweb图书商城设计之分类模块(2)

    这篇文章内容简短,主要介绍了javaweb图书商城中的分类模块,具体内容如下 分类模块的相关类创建 cn.itcast.bookstore.category    domain:Category    dao:CategoryDao    service:CategoryService    web.servlet:CategoryServlet 查询所有分类 流程:main.jsp(<iframe>) -> CategoryService#findAll() -> left.js

  • javaweb图书商城设计之订单模块(5)

    这篇文章是针对javaweb图书商城中订单模块的研究, 1.创建相关类 domain: Order OrderItem dao:OrderDao service:OrderService web.servlete:OrderServlet /** * 订单条目类 */ public class OrderItem { private String iid; private int count;// 数量 private double subtotal;// 小计 private Order or

  • javaweb图书商城设计之用户模块(1)

    本文主要为大家分析了图书商城的用户模块,具体内容如下 1.用户模块的相关类创建 domain:User dao:UserDao service:UserDao web.servlet:UserServlet 2.用户注册 2.1 注册流程 /jsps/user/regist.jsp -> UserServlet#regist() -> msg.jsp 2.2 注册页面 <%@ page language="java" import="java.util.*&

  • javaweb图书商城设计之图书模块(4)

    本文接着上一篇图书商城分类模块进行学习,供大家参考,具体内容如下 1.创建相关类 cn.itcast.bookstore.book domain:Book dao:BookDao service :BookService web.servle:BookServlet Book public class Book { private String bid; private String bname; private double price; private String author; priv

  • java网上图书商城(4)购物车模块1

    本文实例为大家分享了购物车模块的具体代码,供大家参考,具体内容如下 使用的不是session,也不是cookie,而是表 > 添加购物条目 > 修改购物条目的数量 > 删除条目 > 批量删除条目 > 我的购物车,即按用户查询条目 > 查询勾选的条目 1.数据表 复制代码 代码如下: insert  into `t_cartitem`(`cartItemId`,`quantity`,`bid`,`uid`,`orderBy`) values ('B8939FC551314

  • JavaWeb搭建网上图书商城毕业设计

    以前一直接触.net相关的web开发,现在猛然使用javaWeb还是很不习惯,就连搭个框架也是第一次. 一.谈谈项目架构 一开始接触.net相关的开发所以对于.net相关的开发还是比较熟悉的,但我在学校学的java方向的开发,而我打算把这两种平台结合起来,使用java做后台也就是服务提供者,将所有业务逻辑在java平台完成并使用我比较熟悉的.net做Web端的开发.这样一来安卓app,web端就都有了.客户端统一通过分布式框架调用服务.找了很久最终选择了Hprose,这一轻量级.跨语言.跨平台.

  • java网上图书商城(7)订单模块2

    本文实例为大家分享了java网上图书商城订单模块的具体代码,供大家参考,具体内容如下 1.我的订单---查 按用户查询订单 分页查询 PageBean<Order> <div class="divMain"> <div class="divTitle"> <span style="margin-left: 150px;margin-right: 280px;">商品信息</span> &

  • java网上图书商城(1)User模块

    本文实例为大家分享了java网上图书商城user模块代码,供大家参考,具体内容如下 效果图: regist.js $(function() { /* * 1. 得到所有的错误信息,循环遍历之.调用一个方法来确定是否显示错误信息! */ $(".errorClass").each(function() { showError($(this));//遍历每个元素,使用每个元素来调用showError方法 }); /* * 2. 切换注册按钮的图片 */ $("#submitBtn

  • java网上图书商城(3)Book模块

    本文实例为大家分享了java网上图书商城Book模块代码,供大家参考,具体内容如下 小技巧一:分页 ①PageBean<Book> findByCriteria(List<Expression> exprList, int pc)  --- 通用的查询方法(pc 当前页码) ②PageBean封装url;//请求路径和参数 /BookServlet?method=findXXX&cid=1&bname=2 小技巧二:超链接有中文 <%-- url标签会自动对参

随机推荐