万变不离其宗,留个思路在这 注释也很详细
选购页面 index.jsp
<h3>
<a href="cartServlet?id=0">Iphone7</a>
</h3>
<h3>
<a href="cartServlet?id=1">小米</a>
</h3>
<h3>
<a href="cartServlet?id=2">魅族</a>
</h3>
<h3>
<a href="cartServlet?id=3">锤子</a>
</h3>
<h3>
<a href="cartServlet?id=4">三星</a>
</h3>
Servlet
package com.test.session;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CartServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("gb2312");
//获取要添加到购物车商品的id
//拿过来是字符串类型,强转一下
int id=(Integer.parseInt(request.getParameter("id")));
//这里模拟一下数据库了
String[] names={"Iphone7","小米","魅族","锤子","三星"};
//取到id对应的商品名称
String name=names[id];
//获取购物车存放物品的session map<String Integer> 商品名 数量
//把一个Map对象存放到session中去,并且保证只存一次,而商品和数量是存在Map中的
Map<String, Integer> map=(Map<String, Integer>) request.getSession().getAttribute("cart");
if (map==null) {
//LinkedHashMap是HashMap的子类
map=new LinkedHashMap<String, Integer>();
request.getSession().setAttribute("cart",map);
}
//如果购物车里存在该商品,在原来的数量上+1
if (map.containsKey(name)) {
map.put(name,map.get(name)+1);
}else {
map.put(name,1);
}
//输出界面
response.getWriter().write("<a href='index.jsp'><h3>继续购物</h3></a>");
response.getWriter().write("<a href='cart.jsp'><h3>购物车结算</h3></a>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
展示购物车的页面 cart.jsp
<body>
<h2>购物车商品如下</h2><br/>
<%
//1.先获取map
Map<String,Integer> map=(Map<String,Integer>)session.getAttribute("cart");
//2.遍历map
if(map!=null){
//map.keyset 获取map所有的key值
for(String key:map.keySet()){
int value=map.get(key);
//key商品名称 value 数量
%>
<h3 style="color:red">商品名称:<%=key %>  数量:<%=value %></h3><br/>
<%
}
}
%>
<h3>${message }</h3>
<a href="clearCart"><h3>清空购物车</h3></a>
</body>
清空购物车的servlet
package com.test.session;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class ClearCart extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//两种方式清空
//先获取到此次回话的session
HttpSession session=request.getSession();
//然后移除session的值
session.removeAttribute("cart");
//第二种方式
//session.invalidate();
request.setAttribute("message","购物车已清空");
request.getRequestDispatcher("cart.jsp").forward(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}