关于商城购物车的总结---添加购物车

接上一篇,添加购物车利用session存储map集合对象的方式。当用户点击购物车的图片,把商品加入购物车。

关于商城购物车的总结---添加购物车_第1张图片
绑定一个点击事件,把商品的ID传递给后台。

<script type="text/javascript"> function _byGoodsById(id){ //alert("123"); //提交给添加商品的servlet window.location.href = "${pageContext.request.contextPath}/buyGoodsServlet?id="+id; } script>

<dd>
<img src="images/product_buy_01.gif" onclick="_byGoodsById(${p.id});" alt="shopping"/>
dd>

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

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

// 2.后台查询
ProductService productService = new ProductServiceImpl();
Product productFind = productService.findProductById(id);

if (productFind == null || productFind.getPnum() == 0) {
request.setAttribute("msg", "购买的商品已售罄");
    request.getRequestDispatcher("/buyorcart.jsp").forward(request,response);
return;
}
// 3.把商品添加到购物车返回,需要把商品添加到购物车,需要存放商品和商品的数量,存放到session里面

// 3.1先判断是不是首次购买,有没有SESSION
Map<Product, Integer> map = (Map<Product, Integer>) request.getSession().getAttribute("map");

if (map == null) {
    map = new HashMap<Product, Integer>();
    map.put(productFind, 1);
    request.getSession().setAttribute("map", map);
} else {
    // 判断是不是第一次购买该商品
    if (map.containsKey(productFind)) {
// 不是第一次购买,需要把数量加1,值加1
    map.put(productFind, map.get(productFind) + 1);
} else {
    // 第一次购买该商品放入map中
    map.put(productFind, 1);
}
}
// 把结果放到session中,这一步可以省略,因为一次会话只有一个sesssion
request.getSession().setAttribute("map", map);
request.getRequestDispatcher("/buyorcart.jsp").forward(request,response);
}

几点总结:
1.想从jsp页面把id传递给后台的servlet,如果是简单的超链接可以直接加在href路径后面,如果是图片之类的也可以绑定一个点击事件,利用jsp封装后传给后台处理。
2.加购物车时需要先判断用户是否已经使用过购物车session是否存在,如果存在是否购买过此商品。
3.只要是接收后台通过get方式提交的数据都要在进行逻辑判断,在数据查找是否存在,是否为0等等。
4.关于方法的命名要有自己的规则,因为不同的servlet可能需要相同的查询操作,如果方法名字不能望文生义那么会写出方法名不一样,功能一样的方法。
5.针对session的操作最后可以不要再放进去,因为一个会话只有一个session,对session的数据操作,在任何servlet中都可以拿到一样的。
6.需要总结思考什么时候用重定向,什么时候用转发,需不需要中转页面,需要什么样的中转页面。
7.写后台 servlet的时候,要考虑到功能的入口在哪里,从哪边入手。

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