zoukankan      html  css  js  c++  java
  • mvc:三

    回顾:

    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对象

  • 相关阅读:
    Struts2框架的学习遇到的问题1
    博客开通第100天
    RTK(Real Time Kinematic)实时动态差分定位技术
    HSRP 协议/ VRRP 协议(热备份路由协议)
    PKI 公钥基础设施
    路由器的工作原理
    VLAN基础知识
    Linux系统的 粘滞位、sgid和suid
    Kali Linux三步安装中文输入法(极简)
    ACL 包过滤技术
  • 原文地址:https://www.cnblogs.com/djlindex/p/11442198.html
Copyright © 2011-2022 走看看