开发购物车模块

Java基础

浏览数:24

2019-8-23

一、首页浏览书籍的链接 index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>首页</title>
</head>

<body>
<a href="${pageContext.request.contextPath }/servlet/ListBookServlet">浏览书籍</a><br>
</body>
</html>

二、创建DB,用Map集合来代表数据库

package cn.itcast.DB;

import java.util.LinkedHashMap;
import java.util.Map;

import cn.itcast.domain.Book;

public class DB {
    private static Map map = new LinkedHashMap();

    static {
        map.put("1", new Book("1", "javaweb开发", "老张", 38, "一本好书"));
        map.put("2", new Book("2", "jdbc开发", "老黎", 18, "一本好书"));
        map.put("3", new Book("3", "ajax开发", "老佟", 328, "一本好书"));
        map.put("4", new Book("4", "jbpm开发", "老毕", 58, "一本好书"));
        map.put("5", new Book("5", "struts开发", "老方", 28, "一本好书"));
        map.put("6", new Book("6", "spring开发", "老方", 98, "一本好书"));
    }

    public static Map getAll() {
        return map;
    }
}

三、开发实例类Bean Book.java

package cn.itcast.domain;

public class Book {
    private String id;
    private String name;
    private String author;
    private double price;
    private String description;
    
    public Book() {
        super();
    }

    public Book(String id, String name, String author, double price,
                String description) {
        super();
        this.id = id;
        this.name = name;
        this.author = author;
        this.price = price;
        this.description = description;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

}

四、用JavaBean建立一个购物车对象

package cn.itcast.domain;

//代表某个商品,以及商品出现的次数(购物项)
public class CartItem {
    private Book book;
    private int quantity;
    private double price;

    public Book getBook() {
        return book;
    }

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

    public int getQuantity() {
        price = book.getPrice() * quantity;
        return quantity;
    }

    public void setQuantity(int quantity) {
        this.quantity = quantity;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

五、代表用户的购物车 Cart

package cn.itcast.domain;

import java.util.LinkedHashMap;
import java.util.Map;

//代表用户的购物车
public class Cart {
    private Map<String, CartItem> map = new LinkedHashMap();
    private double price;//总价

    public void add(Book book) {
        //看购物车中有没有要添加书的购物项
        CartItem item = map.get(book.getId());
        if (item == null) {
            item = new CartItem();
            item.setBook(book);
            item.setQuantity(1);
            map.put(book.getId(), item);
        } else {
            item.setQuantity(item.getQuantity() + 1);
        }
    }

    public Map<String, CartItem> getMap() {
        return map;
    }

    public void setMap(Map<String, CartItem> map) {
        this.map = map;
    }

    public double getPrice() {
        double totalprice = 0;
        for (Map.Entry<String, CartItem> entry : map.entrySet()) {
            CartItem item = entry.getValue();
            totalprice += item.getPrice();
        }
        this.price = totalprice;
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

}

六、开发DAO

package cn.itcast.dao;

import java.util.Map;

import cn.itcast.DB.DB;
import cn.itcast.domain.Book;

public class BookDao {
    public Map getAll() {
        return DB.getAll();
    }

    public Book find(String id) {
        return (Book) DB.getAll().get(id);
    }
}

七、开发 BusinessService

package cn.itcast.service;

import java.util.Map;

import cn.itcast.domain.Book;
import cn.itcast.dao.BookDao;
import cn.itcast.domain.Cart;
import cn.itcast.domain.CartItem;

//业务层,统一对web层提供所有服务
public class BusinessService {
    private BookDao dao = new BookDao();

    public Map getAll() {
        return dao.getAll();
    }

    public Book findBook(String id) {
        return (Book) dao.getAll().get(id);
    }

    //删除购物车中的购物项
    public void deleteCartItem(String id, Cart cart) {
        cart.getMap().remove(id);
    }

    //清空购物车
    public void clearCart(Cart cart) {
        cart.getMap().clear();
    }


    //改变购物数量
    public void changeItemQuantity(String id, String quantity, Cart cart) {
        CartItem item = cart.getMap().get(id);
        item.setQuantity(Integer.parseInt(quantity));

    }
}

八、获得图书商品列表 ListBookServlet

package cn.itcast.web.controller;

import java.io.IOException;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.itcast.service.BusinessService;

public class ListBookServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        BusinessService service = new BusinessService();
        Map map = service.getAll();
        request.setAttribute("map", map);
        request.getRequestDispatcher("/WEB-INF/jsp/listbook.jsp").forward(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}

九、数据转发到显示界面 listbook.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
    <title>书籍列表页面</title>
</head>

<body style="text-align:center">
<h1>书籍列表</h1>
<table width="70%" border="1" align="center">
    <tr>
        <td>书名</td>
        <td>作者</td>
        <td>售价</td>
        <td>描述</td>
        <td>操作</td>
    </tr>
    <c:forEach var="entry" items="${map}">
        <tr>
            <td>${entry.value.name }</td>
            <td>${entry.value.author }</td>
            <td>${entry.value.price }</td>
            <td>${entry.value.description }</td>
            <td><a href="${pageContext.request.contextPath }/servlet/BuyServlet?id=${entry.key}" target="_blank">购买</a>
            </td>
        </tr>
    </c:forEach>
</table>
</body>
</html>

十、购买处理 BuyServlet

package cn.itcast.web.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.itcast.domain.Book;
import cn.itcast.domain.Cart;
import cn.itcast.service.BusinessService;

public class BuyServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String id = request.getParameter("id");
        BusinessService service = new BusinessService();
        Book book = service.findBook(id);
        //得到用户的购物车
        Cart cart = (Cart) request.getSession().getAttribute("cart");
        if (cart == null) {
            cart = new Cart();
            request.getSession().setAttribute("cart", cart);
        }
        //把书加到用户的购物车中
        cart.add(book);
        response.sendRedirect(request.getContextPath() + "/servlet/ListcartUIServlet");
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}

十一、进入购物车列表,写一个处理列表显示的 ListcartUIServletlistcart.jsp
① ListcartUIServlet

package cn.itcast.web.UI;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ListcartUIServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.getRequestDispatcher("/WEB-INF/jsp/listcart.jsp").forward(request, response);
    }
}

② listcart.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<html>
<head>
    <title>购物车列表</title>
    <script type="text/javascript">
        function deleteitem(id) {
            var b = window.confirm("真的删除吗?");
            if (b) {
                window.location = "${pageContext.request.contextPath }/servlet/DeleteItemServlet?id=" + id;
            }
        }
        function clearcart() {
            var b = window.confirm("真的清空吗?");
            if (b) {
                window.location = "${pageContext.request.contextPath }/servlet/ClearCartServlet";
            }
        }
        function changeQuantity(input, id, oldvalue) {
            //alert(input.value);
            //检查数量是不是一个数字,且是正整数
            var quantity = input.value;
            if (quantity < 0 || quantity != parseInt(quantity)) {
                alert("请输入正整数");
                input.value = oldvalue;
                return;
            }
            var b = window.confirm("确定修改吗?");
            if (b) {
                window.location = "${pageContext.request.contextPath }/servlet/ChangeQuantityServlet?id=" + id + "&quantity=" + quantity;
            }
        }
    </script>
</head>

<body style="text-align:center">
<h1>购物车列表</h1>
<c:if test="${empty(cart.map)}">
    你没有购买任何商品
</c:if>
<c:if test="${!empty(cart.map)}">
    <table width="70%" border="1" align="center">
        <tr>
            <td>书名</td>
            <td>作者</td>
            <td>单价</td>
            <td>数量</td>
            <td>小计</td>
            <td>操作</td>
        </tr>
        <c:forEach var="entry" items="${cart.map}">
            <tr>
                <td>${entry.value.book.name }</td>
                <td>${entry.value.book.author }</td>
                <td>${entry.value.book.price }</td>
                <td>
                    <input type="text" name="quantity" value="${entry.value.quantity }"
                           onchange="changeQuantity(this,${entry.key},${entry.value.quantity })"/>
                </td>
                <td>${entry.value.price }</td>
                <td><a href="javascript:void(0);" target="_blank"
                       onclick="deleteitem(${entry.key});return false;">删除</a>
                </td>
            </tr>
        </c:forEach>
        <tr>
            <td colspan="3">总价计</td>
            <td colspan="2">${cart.price }元</td>
            <td colspan="1"><a href="javascript:void(0);" target="_blank" onclick="clearcart();return false;">清空购物车</a>
            </td>
        </tr>
    </table>
</c:if>
</body>
</html>

十二、更新购物车
① 删除指定的购物项 DeleteItemServlet

package cn.itcast.web.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.itcast.domain.Cart;
import cn.itcast.service.BusinessService;

//删除指定的购物项
public class DeleteItemServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String id = request.getParameter("id");
        BusinessService service = new BusinessService();
        Cart cart = (Cart) request.getSession().getAttribute("cart");
        service.deleteCartItem(id, cart);
        request.getRequestDispatcher("/WEB-INF/jsp/listcart.jsp").forward(request, response);
    }
}

② 清空购物车 ClearCartServlet

package cn.itcast.web.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.itcast.domain.Cart;
import cn.itcast.service.BusinessService;
//清空购物车
public class ClearCartServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Cart cart=(Cart) request.getSession().getAttribute("cart");
        BusinessService service = new BusinessService();
        service.clearCart(cart);
        request.getRequestDispatcher("/WEB-INF/jsp/listcart.jsp").forward(request, response);
    }
}

③ 改变购物项的数量 ChangeQuantityServlet

package cn.itcast.web.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.itcast.domain.Cart;
import cn.itcast.service.BusinessService;
//把购物车中的书修改为指定数量
public class ChangeQuantityServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String id=request.getParameter("id");
        String quantity=request.getParameter("quantity");
        Cart cart=(Cart)request.getSession().getAttribute("cart");
        BusinessService service=new BusinessService();
        service.changeItemQuantity(id,quantity,cart);
        request.getRequestDispatcher("/WEB-INF/jsp/listcart.jsp").forward(request, response);
    }
}

源代码:https://github.com/yvettee36/MVC_Cart

作者:小小蒜头