CartServlet参考代码 :

public void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {

		String bookids[] = req.getParameterValues("bookId"); //id数组;

		Map<Integer,Book> cart = (Map<Integer,Book>)req.getSession().getAttribute("cart");
		//System.out.println(cart.size()); null对
		/*
		 *     Integer   Book
		 *     id        book  (count)
		 *     7         book  (count=2)
		 *     8         book  ( count=5)
		 *
		 * */

		BookDao bd = new BookDaoImpl();
		//如果购物车为null,则new出来一个HashMap对象
		if(cart==null){
			cart = new HashMap<Integer,Book>();//id以及book对象
			req.getSession().setAttribute("cart", cart);
		}

		for(String bookid:bookids){
			Book book = cart.get(Integer.parseInt(bookid));
			if(book==null){
				book = bd.findById(Integer.parseInt(bookid));//根据id获得书籍
				book.setCount(1);//数量为1
			}
			else{
				// 判断是否已经是最后一本书;数量大于获得数量,其他的不能再加数量了
				if(book.getStock()>book.getCount()){
					book.setCount(book.getCount()+1);
				}
			}
			cart.put(Integer.parseInt(bookid), book);
			//需要放入到数据库中,那么购物车表的字段是什么呢?
			//图书id 书名  图片名 数量 合计价格
		}

		req.getSession().setAttribute("cart", cart);
		resp.sendRedirect("cart.jsp");
	}

在该Servlet中利用了session进行存放值,就是开篇我们的方法之一,但是这种方法有什么问题呢?大家好好思考下!!!

下面是购物车代码参考:

<%@ 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" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <head>
    <base href="<%=basePath%>">

    <title>My JSP 'cart.jsp' starting page</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">

  <link rel="stylesheet" href="css/style.css" type="text/css"></link>

  <script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>

  <script type="text/javascript">
  	function jian(id){
		if($("#count"+id).val()==1){
		//采用淘宝模式,如果低于1,则不用提示,直接不可用;
			$("#count"+id).prev().attribute("disabled","disabled");
			return;
		}

  		$.ajax({
  			url:'ChangeCartCountServlet',
  			type:'post',
  			dataType:'text',
  			data:{
  				bookid:id,
  				count:parseInt($("#count"+id).val())-1   //  -1
  			},
  			success:function(data){

 				var price = $("#price"+id).html();
		  		$("#count"+id).val(parseInt($("#count"+id).val())-1);
		  		$("#sum"+id).val("¥"+price*$("#count"+id).val());

		  		calcTotal();

  			}
  		});
  	}

  	function add(id){
  		$.ajax({
  			url:'ChangeCartCountServlet',
  			type:'post',
  			dataType:'text',
  			data:{
  				bookid:id,
  				count:parseInt($("#count"+id).val())+1
  			},
  			success:function(data){
  				if(data=="false"){
  					alert("库存不足!!!!");
  				}
  				else{
  					var price = $("#price"+id).html();
			  		$("#count"+id).val(parseInt($("#count"+id).val())+1);
			  		$("#sum"+id).val("¥"+price*$("#count"+id).val());

			  		calcTotal();
  				}
  			}
  		});

  	}

  	function calcTotal(){
  		// input...
  		var counts = $("input[id^=count]").toArray();
  		var prices = $("div[id^=price]").toArray();
  		var total = 0;

  		for(var i=0;i<prices.length;i++){
  			total += prices[i].innerHTML*counts[i].value;
  		}

  		$("#total").val("¥"+total);
  	}

  </script>

  </head>

  <body>
   <div id="header" class="wrap">
	<div id="banner"></div>
	<div id="navbar">
		<div class="userMenu">
			<ul>
				<li class="current"><font color="BLACK">欢迎您,<strong>andy</strong></font>   </li>
				<li><a href="index.html">首页</a></li>
				<li><a href="orderlist.html">我的订单</a></li>
				<li><a href="cart.html">购物车</a></li>
				<li><a href="logout.jsp">注销</a></li>
			</ul>
		</div>
	</div>
</div>
<div id="content" class="wrap">
	<div class="list bookList">
		<form method="post" name="shoping" action="BuyServlet">
			<table>
				<tr class="title">
					<th class="view">图片预览</th>
					<th>书名</th>
					<th class="nums">数量</th>
					<th class="price">价格</th>
					<th class="nums">合计</th>
					<th class="nums">操作</th>
				</tr>

					<c:set var="total" value="0"></c:set>

					<c:forEach items="${cart}" var="book">
					<tr>

						<td class="thumb">
						<img src="images/book/${book.value.image}" /></td>
						<td class="title">${book.value.bookname}</td>
						<td>
						<img src="images/edit_jian.png" width="12" height="12"
							onclick="jian(${book.value.id})"/>

						<input id="count${book.value.id}" readonly="readonly"
							value="${book.value.count}" size="2"/>

						<img src="images/edit_add.png" width="12" height="12"
						    onclick="add(${book.value.id})"/>
						</td>

						<td>¥
							<div id="price${book.value.id}" >${book.value.price}</div>
						</td>
						<td>
							<input id="sum${book.value.id}"
							value='<fmt:formatNumber
								value="${book.value.count*book.value.price}"
								type="currency"></fmt:formatNumber>'
							/>

							<c:set var="total"
								value=
								"${total+book.value.count*book.value.price}"></c:set>

							<input type="hidden" name="items" value="10:2:31.6"/>
						</td>
						<td>
						<a href="DeleteCartItemServlet?bookid=${book.value.id}">删除</a>
						</td>
					</tr>
					</c:forEach>

				<tr>
					<td>
						地址
					</td>
					<td colspan="5">
						<input name="shipaddress">
					</td>
				</tr>
				<tr>
					<td>
						电话
					</td>
					<td colspan="5">
						<input name="contactphone">
					</td>
				</tr>
				<tr><td colspan="5">

			<div class="button">
				<h4>总价:
					<input id="total"
						value='<fmt:formatNumber value="${total}" type="currency"></fmt:formatNumber>'
					/>
				元</h4>
				<input type="hidden" id="hidden_total_price" name="hidden_total_price"/>
				<input class="input-chart" type="submit" name="submit" value="" />
			</div>
			</td></tr>

			</table>
		</form>
	</div>
</div>
</body>
	<div id="footer" class="wrap">
		网上书城 &copy; 版权所有
	</div>
</html>

</html>

根据id从购物车中删除的Servlet代码参考如下:

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		int bookid = Integer.parseInt(req.getParameter("bookid"));

				Map<Integer,Book> cart = (Map<Integer,Book>)
					req.getSession().getAttribute("cart");
				// 根据key(bookid)删除
				cart.remove(bookid);

				req.getSession().setAttribute("cart", cart);

				resp.sendRedirect("cart.jsp");
	}

jsp电子商务 购物车实现之三 购物车的更多相关文章

  1. taotao购物车2 解决购物车本地cookie和服务器redis不同步的问题

    下面的思路逻辑一定要理清楚,比较绕 思路; 前面已经实现了在cookie本地维护购物车的功能, 这次加入和服务器同步功能, 因为 购物车 操作比较频繁,所以,后台服务器 用redis存储用户的购物车信 ...

  2. "首页添加至购物车,TabBar显示购物车的数量"实现

    今天学习别人的项目源码的时候,看到这样的一种实现功能:首页添加至购物车,TabBar显示购物车的数量....想到以前没有做过,这里学习了,记录一下: 实现的效果图如下: 当点击首页添加至购物的操作的时 ...

  3. day83:luffy:添加购物车&导航栏购物车数字显示&购物车页面展示

    目录 1.添加购物车+验证登录状态 2.右上方购物车图标的小红圆圈数字 3.Vuex 4.购物车页面展示-后端接口 5.购物车页面展示-前端 6.解决一个购物车数量显示混乱的bug 1.添加购物车+验 ...

  4. jsp电子商务购物车之五 数据库存储篇2

    业务逻辑图,简单版要写各个Servlet //ChangeCartCountServlet 使用ajax实现数量,增加或减少; package com.cart.web; import java.io ...

  5. jsp电子商务购物车之四 数据库存储篇

    为了方便用户下次登录,仍然可以看到自己的购物车内容,所以,需要在数据库存储相应的购物车项目,本处增加购物车项表;uid和bid是复合主键. package com.cart.entity; //购物车 ...

  6. jsp电子商务 购物车实现之二 登录和分页篇

    登录页面核心代码 <div id="login"> <h2>用户登陆</h2> <form method="post" ...

  7. jsp电子商务 购物车实现之一 设计篇

    购物车的功能实现. 查询的资料,找到三种方法: 1.用cookie实现购物车: 2.用session实现购物车: 3.用cookie和数据库(购物车信息持久化)实现购物车: ============= ...

  8. 使用MongoDB和JSP实现一个简单的购物车系统

    目录 1 问题描述  2 解决方案  2.1  实现功能  2.2  最终运行效果图  2.3  系统功能框架示意图  2.4  有关MongoDB简介及系统环境配置  2.5  核心功能代码讲解  ...

  9. ASP.NET之电子商务系统开发-2(购物车功能)

    一.前言 继上次的首页数据列表后,这是第二篇.记录一下购物车这个比较庞大的功能,可能实现的方法跟其他人有点不一样,不过原理都差不多,是将cookie存数据库里面的. 二.开始 首先看一下购物车流程及对 ...

随机推荐

  1. MySQL数据库查看数据表占用空间大小和记录数

    MySQL数据库中每个表占用的空间.表记录的行数的话,可以打开MySQL的 information_schema 数据库.在该库中有一个 TABLES 表,这个表主要字段分别是: TABLE_SCHE ...

  2. Java学习笔记十四:如何定义Java中的类以及使用对象的属性

    如何定义Java中的类以及使用对象的属性 一:类的重要性: 所有Java程序都以类class为组织单元: 二:什么是类: 类是模子,确定对象将会拥有的特征(属性)和行为(方法): 三:类的组成: 属性 ...

  3. python 面向对象 (多态)

    什么是多态?多态就像是人有多种心情,场景不一样心情就会不一样. class Dog: def print_self(self): print('this is dog') class Hsq(Dog) ...

  4. IDEA常用操作(一)

    1.视图的调整 左下右的侧边栏如何关闭?——右击选择remove from sidebar 面板上(左下右)的导航栏视图如何隐藏——可以在左下角悬停显示,单击隐藏/开启侧边栏 想打开其它视图怎么办?— ...

  5. 15 GIL 全局解释器锁 C语言解决 top ps

    1.GIL 全局解释器锁:保证同一时刻只有一个线程在运行. 什么是全局解释器锁GIL(Global Interpreter Lock) Python代码的执行由Python 虚拟机(也叫解释器主循环, ...

  6. LeetCode:7. Reverse Integer(Easy)

    题目要求:将给出的整数进行逆序输出 注意:整数的最大范围-2147483648-2147483647,当翻转后的数超出范围后返回0 思路:对给出的整数除以10,取余和取整:然后对取整部分继续取余和取整 ...

  7. C语言RL78 serial bootloader和C#语言bootloader PC端串口通信程序

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 前段时间完成的hype ...

  8. python 产生有序整数序列

    其中一种方法 A = np.linspace(0,n,n)

  9. Ubuntu中搭建Hadoop集群(简记)

    stp1:在Vmware虚拟机上创建Ubantu.2环境 步骤:文件—>新建虚拟机—>典型(下一步)—>下一步——>位置(不建议放c盘,文件地址一定要全英文)—>下一步— ...

  10. 【数据库】 SQL 常用语句

    [数据库] SQL 常用语句 1.批量导入 INSERT INTO Table2(field1,field2,...) SELECT value1,value2,... FROMTable1 要求目标 ...