mvc架构实现商品的购买(二)
程序员文章站
2024-03-11 11:33:31
在上篇文章中 使用了mode1的模型来实现商品的浏览,这篇文章在上篇的基础上,使用mvc架构实现商品的购买。
运行结果:
相对与上篇文章 我们多了购物车...
在上篇文章中 使用了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; }
逻辑代码主要如上。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: asp.net datalist 用法
推荐阅读
-
mvc架构实现商品的购买(二)
-
PHP MVC模式在网站架构中的实现_PHP教程
-
mvc模式 PHP MVC模式在网站架构中的实现分析
-
PHP MVC模式在网站架构中的实现
-
ASP.NET MVC 5 实现基于Quartz.net 的任务调度管理平台(二)
-
苏宁易购亿万级商品评价系统的架构演进之路和实现细节 架构苏宁易购评价系统
-
Extjs4的MVC登录实现(整合struts2)(二)
-
动态网站项目(Dynamic Web Project)CRUD(增删改查)功能的实现(mvc(五层架构)+jdbc+servlet+tomcat7.0+jdk1.8),前端使用JSP+JSTL+EL组合
-
基于mvc三层架构和ajax技术实现最简单的文件上传
-
SpringMVC入门案例实现(MVC和三层架构的区别)