Session购物车实现
//添加购物车
private void addCart(HttpServletRequest request, HttpServletResponse response) {
response.setContentType("application/html;charset=utf-8");
try {
//获取session
HttpSession session = request.getSession();
//定义菜品数量
Integer counter=null;
//从前端获取菜品的id
String id=request.getParameter("id");
String table_id=request.getParameter("table_id");//从前端获取餐桌的id
Food food=foodService.getFoodListById(Integer.parseInt(id));//根据id查询菜品,返回一个菜品对象
//刚开始访问网站时会自动生成一个session,这个session为空
//判断session里面是否有orderlist这个变量的值,因为知道这个session是空的,所以走if的时候,新创建一个map,并把map放进session。并设置菜品数量是1,map中存放的key是菜品对象food,value是菜品数量,然后把session强装为map集合,session里面存放的数据类型是key,value同map
Map<Food,Integer > map=(Map<Food,Integer >)session.getAttribute("orderlist");
if(map==null) {
map=new HashMap<Food,Integer>();
session.setAttribute("orderlist", map);
counter=1;
}else {
//查看该菜品是否存在
counter=map.get(food);
//如果购物车没有该菜品
if(counter==null) {
counter=1;
}else {
//如果有菜品数量++
counter++;
}
}
/*System.out.println(food);//打印菜品对象food和菜品数量
System.out.println(counter);*/
//将food放入map集合里,也就是放入session,上面session强装为map集合,购物车
map.put(food, counter);
Double total=0.0;//定义总价
Double price=0.0;//定义单个菜品总价
//遍历map集合中的food对象,并计算单个菜品总价,和所有菜品的总价
for (Food f : map.keySet()) {
//单价 * 数量
price=f.getPrice()*map.get(f);
total+=price;
}
request.setAttribute("table_id", table_id);//将餐桌id传到前台
request.setAttribute("total",total );//将总价传到前台
request.setAttribute("map", map);//将map传到前台
request.getRequestDispatcher("/front/cart/clientCart.jsp").forward(request, response);//servlet端跳转
} catch (Exception e) {
e.printStackTrace();
}
}
效果如图:
购物车删除同上:
//从购物车删除
private void removeCart(HttpServletRequest request, HttpServletResponse response) {
try {
HttpSession session = request.getSession();
String id=request.getParameter("id");
Food food=foodService.getFoodListById(Integer.parseInt(id));
Map<Food, Integer> map= (Map<Food, Integer>)session.getAttribute("orderlist");
map.remove(food);
session.removeAttribute("orderlist");
session.setAttribute("orderlist1", map);
Double total=0.0;
Double price=0.0;
for (Food f : map.keySet()) {
//单价 * 数量
price=f.getPrice()*map.get(f);
total+=price;
}
request.setAttribute("total",total );
request.setAttribute("map", map);
request.getRequestDispatcher("/front/cart/clientCart.jsp").forward(request, response);
} catch (Exception e) {
e.printStackTrace();
}
}