关于商城购物车的总结---删除功能

最近再做一个简单的商城demo来对前端的基础做一个巩固,购物车又是每个电商项目必须的部分,练习的项目是利用session中存储map集合来模拟。

Map<Product, Integer> map = (Map<Product, Integer>) 
                 request.getSession().getAttribute("map");

实现的基本功能如下图

关于商城购物车的总结---删除功能_第1张图片

1.关于删除的功能

当用户点击用户超联机时,调用后台的deleteProductFromCarServlet,
购物车里面有很多件商品那么该怎样删除呢?这里是传递一个商品的Id给后台,
注意在html代码里面${ 直接写在双引号里面},

href="${pageContext.request.contextPath}/deleteProductFromCar?id=${entity.key.id}"
 
<td class="shopping_product_list_6">
<a href="${pageContext.request.contextPath}/deleteProductFromCar?id=${entity.key.id}" class="blue">删除a>
td>

后台servlet代码:

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // 1.获取提交的商品的id
        String id = request.getParameter("id");

        // 2.从数据库查找是否有此类商品,防止人为输入
        ProductService productService = new ProductServiceImpl();
        Product findProductById = productService.findProductById(id);

if (findProductById == null || findProductById.getPnum() == 0) 
{
    // 如果被恶搞跳到购物车中转页面
    request.setAttribute("msg", "商品不存在,请不要恶搞");
    request.getRequestDispatcher("/cart.jsp")
                    .forward(request, response);
    return;
}

// 获取session
Map<Product, Integer> map = (Map<Product, Integer>) request.getSession().getAttribute("map");

if (map != null) {

// 3.1 根据id删除商品,因为重写了hashcode()和equals()方法,hashmap底层删除也是依赖的此方法
Product product = new Product();
product.setId(Integer.parseInt(id));

// 3.3 遍历map把主键为product的删除
map.remove(product);// 删除map根据主键删除,主键就是product
}
request.getSession().setAttribute("map", map);
response.sendRedirect(request.getContextPath() + "/cart.jsp");
}

几点总结:

1.正常用户点击删除按钮,后台只需在session中直接把对应的商品删除即可,但是为了防止懂技术的用户乱搞,在后台必须要加必要的判断。get提交方式会直接追加在url后面,可以人为篡改url。
2.一般判断会根据id去查询 product表中是否存在这样的商品,数量是否为0,因为这两种情况下用户购物差就不会出现这样的商品
3.在非正常情况判断的代码块最后一定要记得return,防止代码继续往下面跑
4.因为是存在hashmap中,要根据主键product去判断是否是同一商品,需要利用containsKey(key),底层是依赖hashcode()和equals()方法的,所以需要重写这两个方法,删除同样也是根据这两种方法。

你可能感兴趣的:(JAVAWEB基础)