用session商品购物车实现小案例
需求:
有一个商品页面,可以点击超链接将商品添加到购物车,还有一个超链接,点击它的时候可以查看购物车中商品信息。
步骤分析:
代码实现:
index.html
洗衣机 <a href="/session/add2Cart?name=洗衣机">加入购物车</a><br/>
电视机 <a href="/session/add2Cart?name=电视机">加入购物车</a><br/>
缝纫机 <a href="/session/add2Cart?name=缝纫机">加入购物车</a><br/>
打火机 <a href="/session/add2Cart?name=打火机">加入购物车</a><br/>
<a href="/session/cart.jsp">查看购物车</a><br/>
Add2CartServlet
@WebServlet(name = "Add2CartServlet", value = "/add2Cart")
public class Add2CartServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获取name参数的值 洗衣机
String name = request.getParameter("name");
//2.从session中获取购物车(map),判断购物车是否为空
Map<String,Integer> cart = (Map<String, Integer>) request.getSession().getAttribute("cart");
//设置商品的默认数量
Integer count = 1;
if (cart == null) {
//2.1 若为空,第一次使用,初始化map,将map放入session中,设置商品的数量为1
cart = new HashMap<>();
request.getSession().setAttribute("cart",cart);
}else{
//2.2 若不为空,拿过来使用,继续判断map中有无此商品
if (cart.containsKey(name)) {
//a.若有 获取原来的数量,自增,
count = cart.get(name) + 1 ;
}
//b.若无 设置商品的数量为1
}
//3.无论如何都会把此商品放入到购物车中,只是数量不同
cart.put(name,count);
//4.组织响应回去的内容
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
writer.print("已经 <b>"+name+"</b> 加入到购物车中<br/>");
writer.print("<a href='"+request.getContextPath()+"'>继续浏览</a><br/>");
writer.print("<a href='"+request.getContextPath()+"/cart.jsp'>查看购物车</a><br/>");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
cart.jsp
<%@ page import="java.util.Map" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
//1.获取session中的购物车
Map<String,Integer> cart = (Map<String, Integer>) session.getAttribute("cart");
//2.判断购物车是否为空
if (cart == null) {
//2.1 若为空提示..
out.print("<h2>购物车空空如也~~</h2>");
}else{
//2.2 若不为空 表格展示
%>
<table border="1" align="center" width="30%">
<tr>
<th>商品名称</th>
<th>商品数量</th>
</tr>
<%
//遍历map
for (Map.Entry<String, Integer> entry : cart.entrySet()) {
out.print("<tr><td>"+entry.getKey()+"</td>");
out.print("<td>"+entry.getValue()+"</td></tr>");
}
%>
</table>
<%
}
%>
</body>
</html>