javaweb圖書(shū)商城設(shè)計(jì)之購(gòu)物車模塊(3)
本文繼續(xù)為大家分享了javaweb圖書(shū)商城中購(gòu)物車模塊,供大家參考,具體內(nèi)容如下
購(gòu)物車存儲(chǔ)
保存在session中
保存在cookie中
保存在數(shù)據(jù)庫(kù)中
1、創(chuàng)建相關(guān)類
購(gòu)物車的結(jié)構(gòu):
CartItem:購(gòu)物車條目,包含圖書(shū)和數(shù)量
Cart:購(gòu)物車,包含一個(gè)Map
/** * 購(gòu)物車類 */ public class Cart { private Map<String,CartItem> map = new LinkedHashMap<String,CartItem>(); /** * 計(jì)算合計(jì) * @return */ public double getTotal() { // 合計(jì)=所有條目的小計(jì)之和 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())) {//判斷原來(lái)車中是否存在該條目 CartItem _cartItem = map.get(cartItem.getBook().getBid());//返回原條目 _cartItem.setCount(_cartItem.getCount() + cartItem.getCount());//設(shè)置老條目的數(shù)量為,其自己數(shù)量+新條目的數(shù)量 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(); } }
/** * 購(gòu)物車條目類 * */ public class CartItem { private Book book;// 商品 private int count;// 數(shù)量 /** * 小計(jì)方法 * @return * 處理了二進(jìn)制運(yùn)算誤差問(wèn)題 */ public double getSubtotal() {//小計(jì)方法,但它沒(méi)有對(duì)應(yīng)的成員! 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、添加購(gòu)物車條目
<%@ 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>購(gòu)物車列表</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>購(gòu)物車</h1> <c:choose> <%-- 如果沒(méi)有車,或車的內(nèi)容集合為0長(zhǎng) --%> <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'/>">清空購(gòu)物車</a> </td> </tr> <tr> <th>圖片</th> <th>書(shū)名</th> <th>作者</th> <th>單價(jià)</th> <th>數(shù)量</th> <th>小計(jì)</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"> 合計(jì):${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 { /** * 添加購(gòu)物條目 * @param request * @param response * @return * @throws ServletException * @throws IOException */ public String add(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* * 1. 得到車 * 2. 得到條目(得到圖書(shū)和數(shù)量) * 3. 把條目添加到車中 */ /* * 1. 得到車 */ Cart cart = (Cart)request.getSession().getAttribute("cart"); /* * 表單傳遞的只有bid和數(shù)量 * 2. 得到條目 * > 得到圖書(shū)和數(shù)量 * > 先得到圖書(shū)的bid,然后我們需要通過(guò)bid查詢數(shù)據(jù)庫(kù)得到Book * > 數(shù)量表單中有 */ 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"; } /** * 清空購(gòu)物條目 * @param request * @param response * @return * @throws ServletException * @throws IOException */ public String clear(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /** * 1. 得到車 * 2. 設(shè)置車的clear */ Cart cart = (Cart)request.getSession().getAttribute("cart"); cart.clear(); return "f:/jsps/cart/list.jsp"; } /** * 刪除購(gòu)物條目 * @param request * @param response * @return * @throws ServletException * @throws IOException */ public String delete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /* * 1. 得到車 * 2. 得到要?jiǎng)h除的bid */ Cart cart = (Cart)request.getSession().getAttribute("cart"); String bid = request.getParameter("bid"); cart.delete(bid); return "f:/jsps/cart/list.jsp"; } }
3、清空條目
4、刪除購(gòu)物車條目
5、我的購(gòu)物車
top.jsp中存在一個(gè)鏈接:我的購(gòu)物車
我的購(gòu)物車直接訪問(wèn)/jsps/cart/list.jsp,它會(huì)顯示session中車的所有條目。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JavaWeb購(gòu)物車項(xiàng)目開(kāi)發(fā)實(shí)戰(zhàn)指南
- JavaWeb后臺(tái)購(gòu)物車類實(shí)現(xiàn)代碼詳解
- eclipse的web項(xiàng)目實(shí)現(xiàn)Javaweb購(gòu)物車的方法
- javaweb購(gòu)物車案列學(xué)習(xí)開(kāi)發(fā)
- java web開(kāi)發(fā)之購(gòu)物車功能實(shí)現(xiàn)示例代碼
- java web開(kāi)發(fā)之實(shí)現(xiàn)購(gòu)物車功能
- java商城項(xiàng)目實(shí)戰(zhàn)之購(gòu)物車功能實(shí)現(xiàn)
- JAVAEE中用Session簡(jiǎn)單實(shí)現(xiàn)購(gòu)物車功能示例代碼
- java實(shí)現(xiàn)網(wǎng)上購(gòu)物車程序
- Java?web實(shí)現(xiàn)購(gòu)物車案例
相關(guān)文章
Java中幾個(gè)Reference常見(jiàn)的作用詳解
這篇文章主要給大家介紹了Java中關(guān)于Reference多個(gè)作用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。2017-06-06Java中@Pattern注解常用的校驗(yàn)正則表達(dá)式學(xué)習(xí)筆記
對(duì)于正則這個(gè)東西,對(duì)我來(lái)說(shuō)一直是很懵逼的,每次用每次查,然后還是記不住,下面這篇文章主要給大家介紹了關(guān)于Java中@Pattern注解常用的校驗(yàn)正則表達(dá)式學(xué)習(xí)筆記的相關(guān)資料,需要的朋友可以參考下2022-07-07Java利用Poi讀取excel并對(duì)所有類型進(jìn)行處理
這篇文章主要為大家詳細(xì)介紹了Java利用Poi讀取excel并對(duì)所有類型進(jìn)行處理的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2024-01-01詳解Java多線程編程中LockSupport類的線程阻塞用法
LockSupport類提供了park()和unpark()兩個(gè)方法來(lái)實(shí)現(xiàn)線程的阻塞和喚醒,下面我們就來(lái)詳解Java多線程編程中LockSupport類的線程阻塞用法:2016-07-07Lombok如何快速構(gòu)建JavaBean與日志輸出
這篇文章主要介紹了Lombok如何快速構(gòu)建JavaBean與日志輸出,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03Java版數(shù)據(jù)結(jié)構(gòu)插入數(shù)據(jù)時(shí)遇到的結(jié)點(diǎn)為空的問(wèn)題詳解
這篇文章主要介紹了Java版數(shù)據(jù)結(jié)構(gòu)插入數(shù)據(jù)時(shí)遇到的結(jié)點(diǎn)為空的問(wèn)題及解決辦法,需要的朋友們可以學(xué)習(xí)下。2019-09-09JAVA NIO實(shí)現(xiàn)簡(jiǎn)單聊天室功能
這篇文章主要為大家詳細(xì)介紹了JAVA NIO實(shí)現(xiàn)簡(jiǎn)單聊天室功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11java 地心坐標(biāo)系(ECEF)和WGS-84坐標(biāo)系(WGS84)互轉(zhuǎn)的實(shí)現(xiàn)
這篇文章主要介紹了java 地心坐標(biāo)系(ECEF)和WGS-84坐標(biāo)系(WGS84)互轉(zhuǎn)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09