首页 > 编程 > Java > 正文

mvc架构实现商品的购买(二)

2019-11-26 13:33:16
字体:
来源:转载
供稿:网友

在上篇文章中 使用了mode1的模型来实现商品的浏览,这篇文章在上篇的基础上,使用mvc架构实现商品的购买。
运行结果:

相对与上篇文章  我们多了购物车类
由于我们在购买物品时,购物车需要的属性为购买的商品和数量   所以我们用map的键值来保存购买的商品。
当然还有一个总价格,购物车的方法有 添加商品  删除商品  计算总价格  其中总价格应该在每次添加商品和删除商品时 重新计算  购物车商品集合  只在初始化购物车的时候实例化一次即可

package entity;  import java.util.HashMap;  public class Cart {   //购物车商品集合   private HashMap<Items,Integer> cart;   //总金额   private double totalPrices;   public Cart() {     cart=new HashMap<Items, Integer>();     totalPrices=0.0;   }   public HashMap<Items, Integer> getCart() {     return cart;   }   public void setCart(HashMap<Items, Integer> cart) {     this.cart = cart;   }   public double getTotalPrices() {     return totalPrices;   }   public void setTotalPrices(double totalPrices) {     this.totalPrices = totalPrices;   }   //添加物品进购物车   public boolean addToCart(Items item,int counts){     //如果当前物品 已经添加过 只增加数量     if(cart.containsKey(item)){       cart.put(item, cart.get(item)+counts);     }else{       cart.put(item, counts);     }     //重新计算价格     calTotalPrice(item.getPrice()*counts);     return true;   }   //将物品从购物车删除   public boolean removeFromCart(Items item){     if(cart!=null&&cart.containsKey(item)){       calTotalPrice(-item.getPrice()*cart.get(item));       cart.remove(item);     }     return true;   }   //计算总金额   private void calTotalPrice(double price){     totalPrices+=price;   } } 

CartServlet的doGett方法根据action来进行相应的处理

if (request.getParameter("action") != null) {       action = request.getParameter("action");        if ("add".equals(action)) { // 添加商品         if (addGoodsToCart(request, response)) {           request.getRequestDispatcher("../success.jsp").forward(               request, response);         } else {           request.getRequestDispatcher("../failure.jsp").forward(               request, response);         }        } else if ("show".equals(action)) {// 显示购物车         request.getRequestDispatcher("../cart.jsp").forward(request,             response);       } else if ("delete".equals(action)) {// 删除物品         deleteGoodFromCart(request, response);         request.getRequestDispatcher("../cart.jsp").forward(request,             response);       }     } 

当在商品界面 我们点击了放入购物车时 将当前商品的编号传到 购物车的servlet类CartServlet开始处理当前物品 并将当前物品放入购物车

再放入购物车之前 首先判断是否是第一次创建购物车  (购物车肯定只有一个  不能有多个)如果是第一次创建购物车cart
将当前购物车放入session ,然后通过ItemsDao对象调用getItemById(id)方法 获得商品对象  。然后将相应的商品对象 和商品数量放入购物车

//向购物车添加商品   private boolean addGoodsToCart(HttpServletRequest request,       HttpServletResponse response) {     String id=request.getParameter("id");     String counts=request.getParameter("num");     Items item=dao.getItemById(Integer.parseInt(id));     //判断是否是第一次创建购物车     if(request.getSession().getAttribute("cart")==null){       Cart cart=new Cart();       request.getSession().setAttribute("cart", cart);       request.getSession().setAttribute("dao", dao);     }     Cart cart=(Cart) request.getSession().getAttribute("cart");     //将商品添加到购物车     if(cart.addToCart(item, Integer.parseInt(counts))){       return true;     }else{       return false;     }   } 

如果点击了查看购物车   CartServlet重定向到购物车页面

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%> <%@ page import="entity.Cart" %> <%@ page import="entity.Items" %> <% 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>   <base href="<%=basePath%>">   <title>My JSP 'cart.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">   <!--   <link rel="stylesheet" type="text/css" href="styles.css">   -->   <link type="text/css" rel="stylesheet" href="css/style1.css" />   <script language="javascript">     function delcfm() {       if (!confirm("确认要删除?")) {         window.event.returnValue = false;       }     }   </script>  </head>    <body>   <h1>我的购物车</h1>   <a href="goods.jsp">首页</a> >> <a href="goods.jsp">商品列表</a>   <hr>    <div id="shopping">   <form action="" method="">          <table>         <tr>           <th>商品名称</th>           <th>商品单价</th>           <th>商品价格</th>           <th>购买数量</th>           <th>操作</th>         </tr>         <%            //首先判断session中是否有购物车对象           if(request.getSession().getAttribute("cart")!=null)           {         %>         <!-- 循环的开始 -->            <%               Cart cart = (Cart)request.getSession().getAttribute("cart");              HashMap<Items,Integer> goods = cart.getCart();              Set<Items> items = goods.keySet();              Iterator<Items> it = items.iterator();                            while(it.hasNext())              {               Items i = it.next();            %>          <tr name="products" id="product_id_1">           <td class="thumb"><img src="images/<%=i.getPicture()%>" /><a href=""><%=i.getName()%></a></td>           <td class="number"><%=i.getPrice() %></td>           <td class="price" id="price_id_1">             <span><%=i.getPrice()*goods.get(i) %></span>             <input type="hidden" value="" />           </td>           <td class="number">             <%=goods.get(i)%>                    </td>                       <td class="delete">            <a href="servlet/CartServlet?action=delete&id=<%=i.getId()%>" onclick="delcfm();">删除</a>                              </td>         </tr>            <%               }            %>         <!--循环的结束-->                </table>        <div class="total"><span id="total">总计:<%=cart.getTotalPrices() %>¥</span></div>        <%          }        %>       <div class="button"><input type="submit" value="" /></div>     </form>   </div>  </body> </html> 

当点击了删除商品 CartServlet类调用删除商品的方法

// 从购物车删除商品   private boolean deleteGoodFromCart(HttpServletRequest request,       HttpServletResponse response) {     //从session中获取购物车对象     Cart cart = (Cart) request.getSession().getAttribute("cart");     if (cart != null) {       int id = Integer.parseInt(request.getParameter("id"));       if (cart.removeFromCart(dao.getItemById(id))) {         return true;       }     }     return false;    } 

逻辑代码主要如上。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表