用JSP实现的商城购物车模块

这两天,在学习JSP,正好找个小模块来练练手:

下面就是实现购物车模块的页面效果截图:

图1. 产品显示页面 通过此页面进行产品选择,增加到购物车

图2 .购物车页面

图3 . 商品数量设置

好了,先不贴图了,直接上代码;先看看项目的文档结构把(麻雀虽小,五脏俱全):

整个项目包括三个类,两个JSP页面,以下分别把他们的代码贴上:

Cart.java

package shopping.cart;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Cart {
	List<CartItem> items = new ArrayList<CartItem>();

	public List<CartItem> getItems() {
		return items;
	}

	public void setItems(List<CartItem> items) {
		this.items = items;
	}

	public void add(CartItem ci) {
		for (Iterator<CartItem> iter = items.iterator(); iter.hasNext();) {
			CartItem item = iter.next();
			if(item.getProduct().getId() == ci.getProduct().getId()) {
				item.setCount(item.getCount() + 1);
				return;
			}
		}

		items.add(ci);
	}

	public double getTotalPrice() {
		double d = 0.0;
		for(Iterator<CartItem> it = items.iterator(); it.hasNext(); ) {
			CartItem current = it.next();
			d += current.getProduct().getPrice() * current.getCount();
		}
		return d;
	}

	public void deleteItemById(String productId) {
		for (Iterator<CartItem> iter = items.iterator(); iter.hasNext();) {
			CartItem item = iter.next();
			if(item.getProduct().getId().equals(productId)) {
				iter.remove();
				return;
			}
		}
	}

}

CartItem.java

package shopping.cart;

import shopping.cart.Product;

public class CartItem {
	private Product product;

	private int count;

	public int getCount() {
		return count;
	}

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

	public Product getProduct() {
		return product;
	}

	public void setProduct(Product product) {
		this.product = product;
	}
}

Product.java

package shopping.cart;
import java.io.Serializable;

public class Product implements Serializable {
	private String id;// 产品标识
	private String name;// 产品名称
	private String description;// 产品描写叙述
	private double price;// 产品价格

	public Product() {
	}

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

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

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

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

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

	public String getId() {
		return id;
	}

	public String getName() {
		return name;
	}

	public String getDescription() {
		return description;
	}

	public double getPrice() {
		return price;
	}
}

以下是俩JSP页面源代码:

ShowProducts.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ page import="shopping.cart.*"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>

		<title>My JSP ‘ShowProductsJSP.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">

	</head>

	<body bgcolor="#ffffff">
		<%
			Map products = new HashMap();
			products.put("1", new Product("1", "mp3播放器",
					"效果非常不错的mp3播放器,存储空间达1GB", 100.00));
			products.put("2", new Product("2", "数码相机", "象素500万,10倍光学变焦",
					500.00));
			products.put("3", new Product("3", "数码摄像机",
					"120万象素,支持夜景拍摄,20倍光学变焦", 200.00));
			products.put("4", new Product("4", "迷你mp4",
					"市面所能见到的最好的mp4播放器,国产", 300.00));
			products.put("5", new Product("5", "多功能手机",
					"集mp3播放、100万象素数码相机,手机功能于一体", 400.00));
			products.put("6", new Product("6", "多功能手机111",
					"集mp3播放23、100万象素数码相机111,手机功能于一体111",600.00));
			products.put("7", new Product("7", "11111111111",
					"集mp3播放23、100万象素数码相机111,手机功能于一体111",700.00));
			products.put("8", new Product("8", "2222222222",
					"集mp3播放23、100万象素数码相机111,手机功能于一体111",800.00));
			products.put("9", new Product("9", "33333333333333",
					"集mp3播放23、100万象素数码相机111,手机功能于一体111",900.00));
			session.setAttribute("products", products);
		%>
		<H1>
			产品显示
		</H1>

		<form name="productForm"
			action="http://localhost:8088/JSPlearning/ShopCartJSP.jsp"
			method="POST">
			<input type="hidden" name="action" value="purchase">
			<table border="1" cellspacing="0">
				<tr bgcolor="#CCCCCC">
					<tr bgcolor="#CCCCCC">
						<td>
							序号
						</td>
						<td>
							产品名称
						</td>
						<td>
							产品描写叙述
						</td>
						<td>
							产品单位价格(¥)
						</td>

                        <td>
							加入到购物车
						</td>
					</tr>
					<%
						Set productIdSet = products.keySet();
						Iterator it = productIdSet.iterator();
						int number = 1;

						while (it.hasNext()) {
							String id = (String) it.next();
							Product product = (Product) products.get(id);
					%><tr>
						<td>
							<%=number++%>
						</td>
						<td>
							<%=product.getName()%>
						</td>
						<td><%=product.getDescription()%>
						</td>
						<td>
							<%=product.getPrice()%></td>
						<td>
							<a href="Buy.jsp?id=<%=product.getId()%>&action=add" target="cart">我要购买</a>
						</td>
					</tr>
					<%
						}
					%>

			</table>
			<p>
			</p>
		</form>
	</body>
</html>

Buy.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ page import="shopping.cart.*" %>

<%
Cart c = (Cart)session.getAttribute("cart");
if(c == null) {
	c = new Cart();
	session.setAttribute("cart", c);
}

double totalPrice = c.getTotalPrice();

request.setCharacterEncoding("GBK");
String action = request.getParameter("action");

Map products = (HashMap)session.getAttribute("products");

if(action != null && action.trim().equals("add")) {
	String id = request.getParameter("id");
	Product p = (Product)products.get(id);
	CartItem ci = new CartItem();
	ci.setProduct(p);
	ci.setCount(1);
	c.add(ci);
}

if(action != null && action.trim().equals("delete")) {
	String id = request.getParameter("id");
	c.deleteItemById(id);
}

if(action != null && action.trim().equals("update")) {
	for(int i=0; i<c.getItems().size(); i++) {
		CartItem ci = c.getItems().get(i);
		int count = Integer.parseInt(request.getParameter("p" + ci.getProduct().getId()));
		ci.setCount(count);
	}
}
 %> 

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<%
List<CartItem> items = c.getItems();
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>购物车</title>

</head>
<body>

<!-- c的值是:<%=(c == null) %> items的值是:<%=(items == null) %> -->
<form action="Buy.jsp" method="get">
<input type="hidden" name="action" value="update"/>
<table align="center" border="1">
	<tr>
		<td>产品ID</td>
		<td>产品名称</td>
		<td>购买数量</td>
		<td>单位价格</td>
		<td>总价</td>
		<td>处理</td>
	</tr>
	<%
	for(Iterator<CartItem> it = items.iterator(); it.hasNext(); ) {
		CartItem ci = it.next();
		%>
		<tr>
			<td><%=ci.getProduct().getId() %></td>
			<td><%=ci.getProduct().getName() %></td>
			<td>
				<input type="text" size=3 name="<%="p" + ci.getProduct().getId() %>" value="<%=ci.getCount() %>"
					onkeypress="if (event.keyCode < 45 || event.keyCode > 57) event.returnValue = false;"
					onchange="document.forms[0].submit()">
			</td>
			<td><%=ci.getProduct().getPrice() %></td>
			<td><%=ci.getProduct().getPrice()*ci.getCount() %></td>
			<td>

				<a href="Buy.jsp?action=delete&id=<%=ci.getProduct().getId() %>">删除</a>

			</td>
		</tr>
		<%
	}
	%>

	<tr>
		<td colspan=3 align="right">
			全部商品总价格为:
		</td>
		<td colspan=3><%=c.getTotalPrice() %></td>
	</tr>

	<tr>
	<!--	<td colspan=3>
			 <a href="javascript:document.forms[0].submit()">改动</a>
		</td>  -->
		<td colspan=6 align="right">
			<a href="">下单</a>
		</td>
	</tr>
</table>
</form>
</body>
</html>

配置好相关文件,在tomcat中公布后,在浏览器中输入http://localhost:8088/shopCart/ShowProducts.jsp 就可以进入产品展示页面,其他操作都能够在页面上完毕!

注意:我使用的tomcatport(8088)被自己改过,假设没改过tomcatport的童鞋,默认port为8080。

用JSP实现的商城购物车模块,布布扣,bubuko.com

时间: 2024-12-31 03:44:39

用JSP实现的商城购物车模块的相关文章

web day25 web day24 小项目练习图书商城, 购物车模块,订单模块,支付(易宝支付)

购物车模块 购物车存储: 保存在session中(本次使用的) 保存在cookie中 保存在数据库中 购物车相关类 购物车结构 CartItem:包含图书和数量,小计 Cart:包含一个Map<String,CartItem>和部分购物车操作方法 修改登录方法,在用户登录成功后,马上在session中添加一辆车 页面负责遍历存在session域中的购物车属性 添加购物车条目 清空购物车条目 指定删除购物车条目 图 我的购物车 top.jsp中存在一个链接:我的购物车 我的购物车直接访问/jsp

web day24 小项目练习图书商城, 用户,模块(注册,激活,登陆,退出),分类/图书模块

图书商城 模块 用户模块 分类模块 图书模块 购物车模块 订单模块 功能分析 前台 用户模块:注册/激活/登陆/退出 分类模块:查看所有分类 图书模块:查询所有图书/按分类查询图书/查询图书详细(id) 购物车模块:添加/清空/删除购物车条目 /我的购物车(按用户查询) 订单模块:生成订单/我的订单(按用户查询)/按id查询订单/确认收货/ /付款功能(只跳转到银行页面)/付款回调功能 后台 管理员:登陆 分类管理:增/删/改/查 图书管理(我的):增(上传图片)/删/改/查 订单模块:查询所有

easymall项目的商品删除,前台商品分页,商品详情,购物车模块

简单的挑选一下昨天所学的重点知识模块,以备后续的复习 一.购物车模块1.1购物车两种实现的区别:!!!!!!!! 用session保存  缺点:浏览器关闭,session失效时保存在session中购物信息将会消失  后续优化,将购买的信息除了保存在session中以外,还要将购物的信息保存在cookie中,这样  就解决了浏览器关闭购买商品信息丢失的问题(但是解决不了跟换电脑信息丢失的问题)  优点:不用操作数据库,可以减少数据库访问压力 数据库中:  缺点:只用登录的用户才能添加购物车   

购物车模块

学习开发购物车模块 发现一个问题,如果web.xml中配置映射路径中/servlet/***,在serlet中,跳转的时候,会在路径中自动添加/servlet,这个真是非常的恶心.下次设置映射的时候,不加/servlet. 首先给出购买页.这里用静态页面. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = r

第六次博客作业:对bookstore项目中的购物车模块进行测试,并写出测试的缺陷报告。

缺陷编号:01.01.0001 发现人:Lmh 记录日期:2016-06-11 所属模块:购物车模块 确认人:Lmh 确认日期:2016-06-11 当前状态:公开 严重度:3 优先级:3 问题概述:重复购买同一本书,数量不会叠加,会更新成第二次购买的数量. 问题再现描述: 1.执行正常的购买书籍操作,购买数量为99. 2.查看购物车数量为99. 3.返回继续购买同一种书籍,选择购买数量为88. 4.这时查看购物车的该书籍数量会刷新为88. 问题隔离描述: 1.修改购买数量为其他任意数字,问题依

07 用户购物车模块

1 实现添加购物车的功能 前端的页面如下: 前端的页面分析: 要实现添加购物车的功能,前端要向后端传送的数据有商品的id和添加的数量,并且后端规定以post的方式发送给后端. 后端视图函数的业务逻辑 1 判断用户是否登陆,没登陆返回用户未登录 2 接受前端传来的参数 3 对参数进行校验,判断是否有空的参数,有为空的参数返回参数不完整 4 对传过来的商品id进行数据库查询,看数据库中是否有这个商品存在,没有返回商品不存在 5 对参数添加购物车的数量的类型判断,如果不是整数,返回参数错误 6 判断是

8、生鲜电商平台-购物车模块的设计与架构

说明:任何一个电商无论是B2C还是B2B都有一个购物车模块,其中最重要的原因就是客户需要的东西放在一起,形成一个购物清单,确认是否有问题,然后再进行下单与付款. 1. 购物车数据库设计: 说明:业务需求: 1>购物车里面应该存放,那个买家,买了那个菜品的什么规格,有多少数量,然后这个菜品的加工方式如何.(如果存在加工方式的话,就会在这里显示处理.) 2>买家存在购物起送价.也就是用户放入购物车的商品的总价格如果低于配置的起送价,那么这个提交按钮就是灰色的.(不可能你点一个洋葱我们就送过去,成本

D15 Sping Boot 入门 Sping框架--Java Web之书城项目(六) 购物车模块

需求分析 购物车模块 原文地址:https://www.cnblogs.com/nuister/p/12684743.html

使用session技术来实现网上商城购物车的功能

首先.简单的了解session和cookie的区别: 一.session和cookie的区别: session是把用户的首写到用户独占的session中(服务器端) cookie是把用户的数据写给用户的浏览器. session对象由服务器创建,开发人员可以调用request对象的getsession方法得到session对象. 首先写页面代码,仍然借助于商品浏览记录来写: 1.jsp购买页面代码如下: <%@ page language="java" contentType=&q