欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

学习淘淘商城第一百零一课(删除购物车商品及购物车总结)

程序员文章站 2022-05-22 19:52:21
...

        上节课我们一起学习了修改购物车商品数量,这节课我们一起学习下删除购物车商品。

        我们在购物车列表页面点击"删除"链接,如下图所示。

学习淘淘商城第一百零一课(删除购物车商品及购物车总结)

        我们会看到如下图所示界面,可以看到请求的url是/cart/delete/{itemId}.html,与购物车列表页面的url地址/cart/cart.html不一致,但是我们点击"删除"链接后页面应该仍然留在当前页面,我们怎么做呢?我们可以在Controller接口中指定/cart/delete/{itemId}的请求,处理完逻辑后重定向到我们的购物车列表页面,这样就好像页面一直在当前页面一样的效果。

学习淘淘商城第一百零一课(删除购物车商品及购物车总结)        

         我们来写Controller接口,如下图所示。

学习淘淘商城第一百零一课(删除购物车商品及购物车总结)

        代码如下:

@RequestMapping("/cart/delete/{itemId}")
	public String deleteCartItem(@PathVariable Long itemId, HttpServletRequest request,
			HttpServletResponse response){
		//从cookie中取购物车列表
		List<TbItem> cartItemList = getCartItemList(request);
		//查询得到对应的商品
		for(TbItem tbItem : cartItemList){
			if(tbItem.getId() == itemId.longValue()){
				//删除商品
				cartItemList.remove(tbItem);
				break;
			}
		}
		//把购物车列表写入cookie
		CookieUtils.setCookie(request, response, CART_KEY, JSON.toJSONString(cartItemList),
						CART_EXPIRE, true);
		//重定向到购物车列表页面
		return "redirect:/cart/cart.html";
	}
         下面我们便重启taotao-cart-web工程,重启后,我们点击购物车列表页面的"删除"链接,可以看到如下图所示结果,说明购物车中的该商品已经被删除掉了。至于库存还显示1件以及全选、删除选中商品、继续购物我们都没有实现,有兴趣的同学可以自己去实现,我们做到目前这种情况就行了。

学习淘淘商城第一百零一课(删除购物车商品及购物车总结)

             购物车总结:

             我们当前实现的购物车是以Cookie的方式实现的,这样做的优点有以下两点:

             1、实现简单

             2、不需要占用服务端存储空间

             缺点也很明显,主要有以下两点:

             1、存储容量有限(Cookie中保存的数据量毕竟是比较有限的)

             2、更换设备后,购物车信息不能同步。

             那么针对上面的缺点,我们应该怎样解决呢?这里给大家提供一下思路:

             1、要求用户登录。

             2、把购物车商品列表保存到数据库中。推荐使用redis。

             3、如果存到redis的话,key最好用用户的ID,value便是购物车中商品列表。在redis中存储有五种存储方式,我们比较适合使用hash方式,规定一个hash,然后key是商品ID,value是商品基本信息。这样做的好处是存储的内容不是很长,效率比较高。

              4、在用户未登录的情况下写入cookie当中,当用户登录后,访问购物车列表时

               a}  把cookie中的数据同步到redis。

               b}  把cookie中的数据删除

               c)  展示购物车列表时以redis为准。

               d)  如果redis中有数据cookie中也有数据,需要做数据合并。相同的商品数量相加,不同商品添加一个新商品。

              5、如果用户登录状态,展示购物车列表以redis为准。如果未登录,以cookie为准。

              以上就是解决方案,感兴趣的同学可以自己实现一下。