商城项目(1.0版本)第三篇

主要内容: 商品的分页功能 购物模块模型抽取与实现

一、带有分页查看分类下的商品信息

原理:
在这里插入图片描述
步骤:

1_准备工作 /jsp/header.jsp
“+obj.cname+”";
2_ProductServlet_____>findProductsByCidWithPage
获取cid,num
调用业务层功能:以分页形式查询当前类别下商品信息
返回PageModel对象(1_当前页商品信息2_分页3_url)
将PageModel对象放入request
转发到/jsp/product_list.jsp
3_ProductService
创建PageModel对象 目的:计算分页参数
关联集合
关联url
4_ProductDao
1_统计当前类别下商品个数
2_统计当前类别的当前页中的商品信息
5_/jsp/product_list.jsp
获取了当前类别下的当前页中的分类数据和分页参数

约定: 1_当前页: num
2_ 向request放入PageModel属性名称page

二、购物模块_模型抽取

在这里插入图片描述
购物项:(图片路径,商品名称,商品价格,这类商品购买的数量,这类商品总价小计)
class CartItem{
private Product product; //携带图片路径,商品名称,商品价格
private int num; //当前类别商品的数量
private double subTotal;//小计,当前这类商品总共价格 经过计算获取到
}

购物车(个数不确定的购物项)
class Cart{
//List list=new ArrayList(); 个数不确定的购物项
//Map map=new HashMap(); 个数不确定的购物项
double total; //总计/积分 :可以经过计算获取到
方法:清空购物车
方法:移除购物车上的购物项
方法:添加商品到购物车
}

总结:
购物项(商品对象,数量,小计) 小计经过计算获取
购物车(2个属性3个方法)
2个属性: Map<String,CartItem> 个数不确定的购物项
Total:总计
3个方法
清空购物车 移除购物项 添加购物项到购物车
总计是经过计算获取到的

三、购物模块_模型实现
1、购物模块_添加商品到购物车

内存分析原理:
在这里插入图片描述
添加商品到购物车原理:
在这里插入图片描述

步骤:
1_准备工作
*/jsp/product_list.jsp 修改连接

*
/jsp/product_info.jsp
自己设置form表单,设置form method,action
设置隐藏域向服务端传递商品pid
PS:如果一个表单中有多个按钮,点击不同的按钮提交到不同路径
var form= document.getElementById(“formId”);
form.submit();
2_CartServlet____>addCartgItemToCart
从session获取购物车
如果获取不到,创建购物车对象,放在session中
如果获取到,使用即可

   获取到商品id,数量        
   通过商品id查询都商品对象
   获取到待购买的购物项  

   调用购物车上的方法
   重定向到/jsp/cart.jsp

3_ /jsp/cart.jsp 获取购物车上商品信息

重定向/转发
区别:1_ 一次还是两次请求响应 request域数据丢失
2_路径显示问题
3_第二次访问位置

2、购物模块_移除购物项

原理:
在这里插入图片描述
前端的代码:


```javascript
<script >
	//页面加载完成后
	$(function(){
		//给detete类绑定事件 删除购物项
		$(".delete").click(function(){
			if(confirm("确定删除吗?")){
				var pid = this.id;
				window.location.href="/store/CartServlet?method=removeCartItem&id="+pid;
			}
		});
		</script>

后端的代码:

_CartServlet___>removeCartItem

public String removeCartItem(HttpServletRequest req, HttpServletResponse resp) throws Exception {
	//获取删除商品的ID
	String pid = req.getParameter("id");
	//获取购物车
	Cart cart= (Cart)req.getSession().getAttribute("cart");
	//删除商品
	cart.removeCart(pid);
	//重定向
	resp.sendRedirect("/store/jsp/cart.jsp");
	
	return null;
}

3、购物模块_清空购物车
原理:
在这里插入图片描述
前端的代码:


```javascript
<script >
	//页面加载完成后
	$(function(){
		//给clear绑定事件 清空购物车
		$("#clear").click(function(){
			if(confirm("Are you sure to clear cart?")){
				window.location.href="/store/CartServlet?method=clearCartItem";
			}
		});
		});
		</script>

后端的代码:

_CartServlet___>removeCartItem

	public String clearCartItem(HttpServletRequest req, HttpServletResponse resp) throws Exception {
		//获取购物车
		Cart cart= (Cart)req.getSession().getAttribute("cart");
		//清空购物车
		cart.clearCart();
		
		//重定向
		resp.sendRedirect("/store/jsp/cart.jsp");
		
		return null;
	}

注意:购物车的servlet,返回数据时,只能用重定向,不能使用请求转发.
原因: 会出现数据重复提交的问题: 使用请求转发的话, 如果f5刷新 的话.会进行上一次的请求.例如:本次请求为:买了一个手机,这时购物车的 手机数量为 : 1,如果你刷新请求的话,这时购物车的 手机数量为 : 2; 继续刷新的话;手机数量为 : 3.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值