回顾:
1.展示分类信息
包含(动态包含和静态包含)
ajax $.post(url,params,fn,type) $.get(url,params,fn,type) $.ajax(选项)
url:请求路径 params:请求参数,可以key-value写,可以json对象写 fn:回调函数,可以接受返回obj type:返回类型
2.展示最新和热门商品
入口 访问项目首页就发起请求展示
3.展示商品详情 简单:只需要将商品的id传过去即可
4.分页展示分类商品 需要将cid、第几页的数据传过去
分页里面需要的5个数据:当前页、当前页的数据、每页展示大小、总页数、总记录数
解耦合思想
其实就是引入了beans.xml,模仿了spring的核心配置文件,去将bean的注入而已
项目下引入beans.xml到src下,然后将BeanFactory添加到utils包下面,导入dom4j和jaxen包到lib下面
现在的实现类在beans.xml配置文件里面配了并且有了BeanFactory类读文件,所以为了解耦合new的代码都换成了下面这样式的
解决了service与dao层的耦合问题
把商品添加到购物车
需求:在商品的详情页面输入购买的数量,点击加入购物车就将该商品添加到购物车了
技术:分析:我先添加了一个商品到购物车,然后我回到商品详情页面,又添加了一个商品到购物车,发现之前添加的物品还在
不可能添加到别人哪里,所以用会话技术保存session,专属于浏览器的,以后项目一、项目二也会用到这个东西会用cookie,只不过数据保存的地方不一样而已,都可以
涉及到实体:
购物车(cart)实体-------购物车的信息是不写到数据库里边的
属性:商品购买信息的集合(专业新名字:1.购物项信息Map<String pid,CartItem>,一个id删除一个购物项,非常方便)
2.总金额 就这两个属性
方法:物品本身有方法才能调用,不是我们可以去把商品加入购物车,而是本来就有加入这个方法,我们去调用的而已,不是我们开着汽车跑,而是汽车本来就有跑的这个方法,我们去调用的
加入购物车add2cart(CartItem item){ 判断购物车是否有这个商品 如果有,修改购买数量,修改总金额;如果没有,直接put进去,修改金额}
从购物车移除removeFromCart(String pid){ 由pid移除一个购物项,修改总金额}
清空购物车clearCart{ 清空购物车,修改总金额为0}
--------------------------------------------------------------------------------------------------------------------------------------------------
购物项(cartItem)实体
属性:1.商品对象(product) 2.购买数量(count) 3.小计(sbutotal)
方法:重写小计方法,算出数量*市场价=总额 显示在页面
getSubstotal(){ return product.getShop_price*count }
设计实体功能代码
实现步骤分析
1.修改商品详情product_info.jsp页面
添加一个表单:method=add2cart 商品的pid=xxx 商品的购买数量=:count=123123
点击"加入购物车",将表单提交到/store/cart 和购物车相关,所以提交到cartservlet
2.编写cartservlet 基础baseservlet 编写add2cart方法
获取商品的pid和购买数量count 调用productservice通过pid获取商品
封装cartItem new cartItem(Product,count) 将cartitem加入购物车 获取购物车(session中获取),调用add2car()方法即可 重定向到cart.jsp上
从购物车移除一个商品
需求:在cart.jsp上,点击某一个商品的删除,弹出一个提示“您忍心抛弃我吗?”,点击确定就从购物车中移除,否则不删
步骤分析:1.给 删除 添加链接/store/cart?method = remove&pid=xxx
<td><!-- 先让移除超链接失效,然后弹出一个框 -->
<a href="javascript:void(0);" onclick="removeFromCart('${ci.product.pid}')" class="delete">删除</a>
</td>
<script type="text/javascript">
function removeFromCart(pid){
if (confirm("你忍心抛弃我吗?")) {
location.href="${pageContext.request.contextPath}/cart?method=remove&pid="+pid;
}
}
</script>
2.在cartservlet中编写remove方法 获取pid,获取cart,执行removeFormCart()方法,重定向到cart.jsp
清空购物车
需求:点击cart.jsp上的清空购物车,需要将购物车中所有商品移除掉
步骤分析:1.修改 清空购物车的连接/store/cart?method=clear
2.编写clear方法 获取购物车,执行clearCart() 重定向到cart.jsp上
3.判断购物车中是否有商品,有则展示,无则提示
生成订单(提交订单)
需求:在cart.jsp上,点击“提交订单”,将购物车中的商品,最终保存到数据库中(肯定需要一张表保存把bean)
实体分析:
用户 订单 商品 用户和订单:一对多 订单和商品:多对多
表分析:用户表 商品表 订单表 用户和订单是一对多,在订单表中添加外键 订单和商品是多对多,引入一张
订单表:(见第一天的分析) id 订单状态 订单金额 下单时间 收货人信息 user_id(用户外键)
订单项表:(见第一天的分析) pid oid itemid 某个商品的购买数量 小计
实体具体分析:上面分析的是表,这里分析的是java类,有相同
订单java类属性:id 订单状态 订单金额 下单时间 收货人信息 user对象(在一对多的关系处理的时候需要在多的一方放一个一的一方的引用) 订单项列表List<OrderItem> list;
订单项java类属性:product对象(pid) order对象(oid) itemid count(某个商品的购买数量) subtotal(小计)
再分析----一个订单里面有多个订单项,那么怎么查看订单里面的订单项呢?所以订单里面有一个订单项的列表,需要在一的一方放一个多的一方的集合
步骤分析:
保存订单:在orders中插入一条数据 在orderitems中插入多条数据
1.在cart.jsp上,点击提交订单,发送请求 路径:/store/order?method=save
public String save(HttpServletRequest request, HttpServletResponse response) throws IOException { try { //-1.从session中获取user,没登录生成订单没用 User user = (User) request.getSession().getAttribute("user"); if (user == null) { request.setAttribute("msg","请先登录"); return "/jsp/msg.jsp"; } //0.获取购物车 Cart cart = (Cart) request.getSession().getAttribute("cart"); //1.封装订单对象 //1.1创建对象 Order order = new Order(); //1.2设置oid order.setOid(UUIDUtils.getId()); //1.3设置ordertime order.setOrdertime(new Date()); //1.4设置total order.setTotal(cart.getTotal()); //1.5设置state order.setState(Constant.ORDER_WEIFUKUAN); //1.6设置user order.setUser(user); //1.7设置items(订单项表),需要遍历购物项列表 for (CartItem ci : cart.getCartItems()) { //1.7.1封装成orderitem OrderItem oi = new OrderItem(); //a 创建一个orderitem oi.setItemid(UUIDUtils.getId()); //b 设置itemid uuid oi.setCount(ci.getCount()); //c 设置count 从ci中获取 oi.setSubtotal(ci.getSubtotal()); //d 设置subtotal 从ci中获取 oi.setProduct(ci.getProduct()); //e 设置product 从ci中获取 //f 设置order oi.setOrder(order); //1.7.2将orderitem加入order的items order.getItems().add(oi); } //2.调用orderservice完成保存操作 OrderService os = (OrderService) BeanFactory.getBean("OrderService"); os.save(order); //3.请求转发到order_info.jsp request.setAttribute("bean",order); } catch (Exception e) { } return "/jsp/order_info.jsp";


下面需要在页面展示出来就可以了
找到order_info.jsp
总结:
购物车设计
添加到购物车
从购物车移除一个商品
清空购物车(设计的是map集合)
订单实体 user对象 List<OrderItem>集合 二者一对多的关系
订单项实体 order对象 product对象