版权声明:本文为博主原创文章,如有转载请注明出处,谢谢。 https://blog.csdn.net/pdsu161530247/article/details/82251023
目录
扫描二维码关注公众号,回复:
3156007 查看本文章
1.功能分析
用户点击删除,未登录从cookie、已登录从redis中删除该商品
在cart.jsp,删除会跳转对应的url:/cart/delete/${cart.id}.html
2.登录状态下删除购物车中的商品
url:/cart/delete/${cart.id}.html
参数:cartid,其实是就是itemId
根据商品id,从cookie或者redis中删除接口
返回值:展示购物车列表页面。Url需要做redirect跳转。
2.1服务层
2.1.1dao层
直接通过jedisClient操作redis数据库
2.1.2service层
在taotao-cart-interface创建对应接口
/**
* 根据用户id与商品id删除购物项
* @param userId
* @param itemId
* @return
*/
TaotaoResult deleteItemCartByItemId(Long userId,Long itemId);
在taotao-cart-service创建实现类
业务逻辑:
根据userid、itemid删除redis中购物车列表的商品
/** 根据用户id与商品id删除购物项 */
@Override
public TaotaoResult deleteItemCartByItemId(Long userId, Long itemId) {
jedisClient.hdel(TT_CART_REDIS_PRE_KEY+":"+userId, itemId+"");
return TaotaoResult.ok();
}
2.2表现层
2.2.1controller
url:/cart/delete/${cart.id}.html
参数:cartid,其实是就是itemId
根据商品id,从cookie或者redis中删除接口
返回值:展示购物车列表页面。Url需要做redirect跳转到商品列表展示的controller。
/**
* 根据商品id,删除对应在购物车中的商品
*
* @param itemId
* @param request
* @param response
* @return
*/
/* /cart/delete/${cart.id}.html */
@RequestMapping("/cart/delete/{itemId}")
public String deleteItemCartByItemId(@PathVariable Long itemId, HttpServletRequest request,
HttpServletResponse response) {
// 1.从cookie中获取token
String token = CookieUtils.getCookieValue(request, COOKIE_TOKEN_KEY);
// 2.根据token调用SSO的服务,获取用户的信息
TaotaoResult result = loginService.getUserByToken(token);
if (result.getStatus() == 200) {
// 3.如果用户已经登录,删除redis中对应商品
TbUser tbUser = (TbUser) result.getData();
cartService.deleteItemCartByItemId(tbUser.getId(), itemId);
} else {
// 4.如果用户没登录,删除cookie中对应商品
//deleteCookieItemCart(itemId, request, response);
}
return "redirect:/cart/cart.html";// 重定向
}
2.3测试访问
在登录状态,点击删除
删除成功
查看redis是否还存在该用户的购物车,redis中也被删除了。
3.未登录状态下删除购物车中的商品
在未登录状态都是对cookie的操作
3.1服务层
服务层不变,存入cookie,需要要使用servlet原生response对象,跟service没什么关系,所以放在controller中。
3.2表现层
3.2.1controller
对于没登录用户删除cookie,单独抽出来一个私有方法。
从cookie中取出购物车,遍历购物车,删除商品,将更新的购物车存入cookie中。
/** 删除cookie购物车中对应商品 */
private void deleteCookieItemCart(Long itemId, HttpServletRequest request, HttpServletResponse response) {
List<TbItem> cartList = getCookieCartList(request);
TbItem deleteItem = new TbItem();
boolean flag = false;
// 1.查看cookie中是否存在该商品
for (TbItem tbItem : cartList) {
// 2.存在就记录下这个商品
if (tbItem.getId() == itemId.longValue()) {
deleteItem = tbItem;
flag = true;
break;
}
}
// 3.如果存在,移除商品,并更新cookie中的购物车
if (flag) {
cartList.remove(deleteItem);
CookieUtils.setCookie(request, response, COOKIE_CART_KEY, JsonUtils.objectToJson(cartList), 7 * 24 * 3600,
true);
}
}
3.3测试访问
首先退出登录
在未登录状态下删除
删除成功。
刷新页面查看是否在cookie中。并没有,删除成功。