本文实例为大家分享了java实现购物车功能的具体代码,供大家参考,具体内容如下
1 需要实现
1、实现淘淘商城的购物车功能
2 购物车功能
2.1 功能说明
1、商品加入购物车时,不是必须要求登录。京东不需要登录,淘宝需要登录。各有好处。
2、计算购物车中商品的总价。当商品数量发生变化时需要重新计算。
3、用户可以删除购物车中的商品。
4、用户下单后,删除购物车的功能。
购物车在用户不登陆的情况下也可以使用购物车。需要把购物车的商品信息写入cookie中。所有对购物车的操作都是操作cookie。有效 的降低数据库的压力。
缺点:换一台电脑后购物车的商品不能同步。
实现的工程:taotao-protal中实现购物车功能。只需要调用商品信息的服务,除此之外不需要和其他系统交互。
2.2 功能分析
1、在用户不登陆的清空下也可以使用购物车,那么就需要把购物车信息放入cookie中。
2、可以把商品信息,存放到pojo中,然后序列化成json存入cookie中。
3、取商品信息可以从cookie中把json数据取出来,然后转换成java对象即可。
4、此功能只需要操作cookie不需要数据库的支持,所以只需要在taotao-portal中实现即可。
5、购物车分有四种动作
a) 添加商品
b) 修改商品数量
c) 删除购物车中的商品
d) 展示购物车商品列表
2.3 添加购物车商品
在商品详情页面点击“加入购物车”按钮提交一个请求吧商品id传递给Controller,Controller接收id,Controller调用Service根据商品id查询商品基本信息。把商品写入cookie中,加入cookie之前先从cookie中把购物车的商品取出来判断当前购物车商品列表中是否有此商品,如果有数量加一,如果没有添加一个商品,数量为1。展示给用户购物车列表。
2.3.1 service
功能:接收一个商品id,数量(默认为1),根据商品id查询商品信息。调用taotao-rest的服务。把商品添加到购物车,先把购物车商品列表取出来,判断列表中是否有此商品,如果有就增加数量就可以了。如果没有把此商品添加到商品列表。返回添加成功Taotaoresult。
功能:
1、接收controller传递过来的商品id,根据商品id查询商品信息。
2、从cookie中取出购物车信息,转换成商品pojo列表。
3、把商品信息添加到商品列表中。
参数:
1、商品id
2、Request
3、response
返回值:
TaoTaoResult
@Service public class CartServiceImpl implements CartService { //服务url @Value("${REST_BASE_URL}") private String REST_BASE_URL; //商品服务url @Value("${ITEMS_ITEM_URL}") private String ITEMS_ITEM_URL; //COOKIE中购物车商品对应的key @Value("${CART_ITEMS_LIST_KEY}") private String CART_ITEMS_LIST_KEY; //购物车cookie生存期 @Value("${CART_ITEMS_EXPIRE_TIME}") private Integer CART_ITEMS_EXPIRE_TIME; /** * 添加购物车商品 * <p>Title: addItem</p> * <p>Description: </p> * @param itemId * @param request * @param response * @return * @see com.taotao.portal.service.CartService#addItem(java.lang.Long, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ @Override public TaotaoResult addItem(Long itemId, HttpServletRequest request, HttpServletResponse response) { //根据商品id查询商品信息 Item item = getItemById(itemId); if (item == null) return TaotaoResult.build(400, "未查询到该商品信息"); //取cookie中购物车商品列表 List<Item> cartItems = getItemListFromCookie(request); //判断该商品是否存在于购物车中 boolean itemExists = false; for (Item i : cartItems) { if (i.getId().longValue() == itemId.longValue()) { //购物车中有此商品 i.setNum(i.getNum() + 1); itemExists = true; break; } } //如果商品不存在于购物车则向购物车商品列表中添加一个商品 if (! itemExists) { //设置数量为1 item.setNum(1); //把商品添加到购物车 cartItems.add(item); } //把购物车信息写入cookie中 CookieUtils.setCookie(request, response, CART_ITEMS_LIST_KEY, JsonUtils.objectToJson(cartItems), CART_ITEMS_EXPIRE_TIME, true); return TaotaoResult.ok(cartItems); } private Item getItemById(Long itemId) { //根据商品id查询商品信息 String resultStr = HttpClientUtil.doGet(REST_BASE_URL + ITEMS_ITEM_URL + itemId); //转换成taotaoResult TaotaoResult result = TaotaoResult.formatToPojo(resultStr, Item.class); //取商品信息 Item item = null; if (result.getStatus() == 200) { item = (Item) result.getData(); } return item; } private List<Item> getItemListFromCookie(HttpServletRequest request) { //取cookie中购物车商品列表 String cartItemsStr = CookieUtils.getCookieValue(request, CART_ITEMS_LIST_KEY, true); //如果不为空那么就转换成java对象 List<Item> cartItems = null; if (!StringUtils.isBlank(cartItemsStr)) { cartItems = JsonUtils.jsonToList(cartItemsStr, Item.class); } else { cartItems = new ArrayList<>(); } return cartItems; } }
2.3.2 商品pojo
商品pojo需要使用taotao-portal中的Item。此pojo在反序列化时会抛异常。需要做如下修改:
2.3.3 Controller
@Controller @RequestMapping("/cart") public class CartController { @Autowired private CartService cartService; @RequestMapping("/add/{itemId}") public String addItem(@PathVariable Long itemId, HttpServletRequest request, HttpServletResponse response, Model model) { //添加商品信息 TaotaoResult result = cartService.addItem(itemId, request, response); //错误信息 if (result.getStatus() != 200) { model.addAttribute("message", result.getMsg()); return "error/exception"; } //把购物车中的商品传递给页面 model.addAttribute("cartList", result.getData()); return "cart"; } }
用户点击“我的购物车”展示购物车信息
2.4 展示购物车商品
2.4.1 Service
/** * 取购物车列表 * <p> * Title: getCartItemsList * </p> * <p> * Description: * </p> * * @return * @see com.taotao.portal.service.CartService#getCartItemsList() */ @Override public List<Item> getCartItemsList(HttpServletRequest request) { // 从cookie中取商品列表 List<Item> itemsList = getItemListFromCookie(request); return itemsList; }
2.4.2 Controller
@RequestMapping("/cart") public String showCart(HttpServletRequest request, Model mode) { //取购物车信息 List<Item> list = cartService.getCartItemsList(request); mode.addAttribute("cartList", list); return "cart"; }
2.5 修改商品数量
当点击购物车商品的“+”、“-”号时增加或减少商品数量。减少商品数量时,如果数量为“1”则不继续减少。
2.5.1 Service
/** * 修改指定商品的数量 * <p>Title: changeItemNum</p> * <p>Description: </p> * @param itemId * @param num * @param request * @param response * @return * @see com.taotao.portal.service.CartService#changeItemNum(long, int, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ @Override public TaotaoResult changeItemNum(long itemId, int num, HttpServletRequest request, HttpServletResponse response) { //从cookie中取商品列表 List<Item> list = getItemListFromCookie(request); //从商品列表中找到要修改数量的商品 for (Item item : list) { if (item.getId() == itemId) { //找到商品,修改数量 item.setNum(num); break; } } //把商品信息写入cookie CookieUtils.setCookie(request, response, CART_ITEMS_LIST_KEY, JsonUtils.objectToJson(list), CART_ITEMS_EXPIRE_TIME, true); return TaotaoResult.ok(); }
2.5.2 Controller
@RequestMapping("/update/num/{itemId}/{num}") @ResponseBody public TaotaoResult updateNumById(@PathVariable Long itemId, @PathVariable Integer num, HttpServletRequest request, HttpServletResponse response) { TaotaoResult result = cartService.changeItemNum(itemId, num, request, response); return result; }
2.6 删除购物车商品
2.6.1 Service
/** * 删除购物车中的商品 * <p> * Title: deleteItem * </p> * <p> * Description: * </p> * * @param itemId * @param request * @param response * @return * @see com.taotao.portal.service.CartService#deleteItem(java.lang.Long, * javax.servlet.http.HttpServletRequest, * javax.servlet.http.HttpServletResponse) */ @Override public List<Item> deleteItem(Long itemId, HttpServletRequest request, HttpServletResponse response) { List<Item> itemsList = getCartItemsList(request); // 找到购物车中的商品,并删除之 for (Item item : itemsList) { if (item.getId().longValue() == itemId.longValue()) { itemsList.remove(item); break; } } // 更新cookie中的购物车数据 CookieUtils.setCookie(request, response, CART_ITEMS_LIST_KEY, JsonUtils.objectToJson(itemsList), CART_ITEMS_EXPIRE_TIME, true); return itemsList; }
2.6.2 Controller
@RequestMapping("/delete/{itemId}") public String deleteItemById(@PathVariable Long itemId, HttpServletRequest request, HttpServletResponse response, Model model) { List<Item> list = cartService.deleteItem(itemId, request, response); model.addAttribute("cartList", list); return "cart"; }
购物车存在的问题
1、更换设备购物车商品不能同步
a) 不能把购物车商品保存到数据库
b) 要求用户登录才能同步信息
c) 可以把购物车信息保存到redis中,key就是用户,value就是购物车列表
d) 购物车商品合并的问题。
2、提交订单后购物车商品需要清空。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本节将实现商城项目前台的购物车管理模块:添加、浏览、删除、修改和清空等购物车操作。 (1). 开发前的准备工作: 在数据库 shopdb 中已存在数据表goods,并且内有测试数据。 默认开启了session,并且执行了数据迁移,数据库中已存在django_session表。 在common应用目录中的myobject/common/models.py 模型文件中,已存在Goods模型类的定义。
本文向大家介绍Android实现商城购物车功能的实例代码,包括了Android实现商城购物车功能的实例代码的使用技巧和注意事项,需要的朋友参考一下 最近公司项目做商城模块,需要实现购物车功能,主要实现了单选、全选,金额合计,商品删除,商品数量加减等功能,先看看效果图: 在这里插入图片描述 一、实现步骤: 0、添加依赖库 1.购物车主界面布局文件(activity_main.xml) 2.购物车实现
本文向大家介绍Python实战购物车项目的实现参考,包括了Python实战购物车项目的实现参考的使用技巧和注意事项,需要的朋友参考一下 购物车程序 要求如下图 代码 结果 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对呐喊教程的支持。如果你想了解更多相关内容请查看下面相关链接
本文向大家介绍java web开发之实现购物车功能,包括了java web开发之实现购物车功能的使用技巧和注意事项,需要的朋友参考一下 为了方便自己以后复习,所以写的比较仔细,记录下自己的成长。 既然是做购物车,那么前提条件是首先需要一系列商品,也就是要建一个实体,这里建了一个商品表 通过查询在浏览器上显示 基本显示已经做好了,现在进入我们的重头戏,Servlet 点击放入购物车时,将访问Se
本文向大家介绍Android实现购物车功能,包括了Android实现购物车功能的使用技巧和注意事项,需要的朋友参考一下 最近看了一些淘宝购物车的demo,于是也写了一个。 效果图如下: 主要代码如下: actvity中的代码: actvity中XML的代码: -XML中头部可以到网上找一个这里就不放上来了 .checkbox和button的样式可以根据个人喜好设置。 Adaper中的代码: Ada
本文向大家介绍vant实现购物车功能,包括了vant实现购物车功能的使用技巧和注意事项,需要的朋友参考一下 做一些电商或者支付页面,肯定少不了购物车功能,一方面正反选,另一方面动态价格,全选之后再去加减商品数量(这里必须考虑 里面有很多蛋疼的问题)猛的一想,感觉思路很清晰,但是,真正动起手来就各种bug出来了,说实话 搞这个购物车,浪费我整整一下午的时间,当我回过头捋一遍,其实,半小时就能完事。就