主要内容: 商品的分页功能 购物模块模型抽取与实现
一、带有分页查看分类下的商品信息
原理:
步骤:
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.