功能:应用会话技术实现购物车功能,点击货物,将货物保存至购物车,实现购物车的增添清空功能
主界面代码:
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %> <%@page import="java.util.Map" %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>Product List</title> </head> <body> <h2>Product List</h2> //购物车界面跳转链接 <a href="<c:url value="/shop?action=viewCart" />">View Cart</a><br /><br /> <% //获取所有商品 Map<Integer, String> products = (Map<Integer, String>)request.getAttribute("products"); for(int id : products.keySet()) { %> <%-- 将商品一一显示出来,并且在点击的时候将商品ID添加到购物车中,并访问购物车--%> <a href="<c:url value="/shop"> <c:param name="action" value="addToCart" /> <c:param name="productId" value="<%=Integer.toString(id)%>"/> </c:url>"><%= products.get(id) %></a><br /><% } %> </body> </html>
查看购物车界面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@page import="java.util.Map" %> <%-- 导入标签 --%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head> <title>View Cart</title> </head> <body> <h2>View Cart</h2> <a href="<c:url value="/shop"/>">Product List</a><br/><br/> <a href="<c:url value="/shop?action=emptyCart"/>">Empty Cart</a><br/><br/> <% //获取session中的两个对象 Map<Integer,String> products = (Map<Integer,String>)request.getAttribute("products"); Map<Integer,Integer> cart = (Map<Integer,Integer>)request.getSession().getAttribute("cart"); if (cart == null || cart.size() == 0){ //如果购物车中没有东西 out.println("Your cart is empty."); }else { for (int id: cart.keySet()){ //输出购物车列表 out.println(products.get(id) + "(qty:" + cart.get(id) +")<br/>"); } } %> </body> </html>
主servlet代码:
import com.sun.deploy.net.HttpRequest; import com.sun.deploy.net.HttpResponse; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.xml.ws.Response; import java.io.IOException; import java.util.HashMap; import java.util.Hashtable; import java.util.Map; public class StoreServlet extends HttpServlet { private final Map<Integer,String> products = new HashMap<>(); public StoreServlet(){ //在商品库中添加商品 this.products.put(1,"Sandpaper"); this.products.put(2,"Nails"); this.products.put(3,"Glue"); this.products.put(4,"Paint"); this.products.put(5,"Tape"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String action = request.getParameter("action"); //获取jsp页面传来的action参数的值 if(action == null){ action = "browse"; //如果值为空,赋值browse,将页面定向至主界面 } switch (action){ case "addToCart": this.addToCart(request,response); break; case "viewCart": this.viewCart(request,response); break; case "browser": this.browse(request,response); break; case "emptyCart": this.emptyCart(request,response); break; default: this.browse(request,response); break; } } //购物车界面 private void viewCart(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{ request.setAttribute("products",this.products); request.getRequestDispatcher("/jsp/view/viewCart.jsp") .forward(request,response); //页面重定向至购物车页面 } //主界面 private void browse(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{ request.setAttribute("products",this.products); request.getRequestDispatcher("/jsp/view/browse.jsp") .forward(request,response); } //添加商品到购物车 private void addToCart(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ int productId; try { //获取选择的商品ID productId = Integer.parseInt(request.getParameter("productId")); }catch (Exception e){ response.sendRedirect("shop"); return; } HttpSession session = request.getSession(); if(session.getAttribute("cart") == null){ //获取购物车session,如果不存在重新添加。 session.setAttribute("cart",new Hashtable<Integer,Integer>()); } @SuppressWarnings("unchecked") Map<Integer,Integer> cart = (Map<Integer,Integer>)session.getAttribute("cart"); if(!cart.containsKey(productId)){ //如果列表中不包含该ID,将该ID添加到购物车中,并显示选择商品数为0 cart.put(productId,0); } //将选择的商品数量+1 cart.put(productId,cart.get(productId) + 1); response.sendRedirect("shop?action=viewCart"); //跳转至购物车界面 } //清空购物车 private void emptyCart(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException{ request.getSession().removeAttribute("cart"); response.sendRedirect("shop?action = viewCart"); } }
配置文档:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <servlet> <servlet-name>StoreServlet</servlet-name> <servlet-class>com.wrox.StoreServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>StoreServlet</servlet-name> <url-pattern>/shop</url-pattern> </servlet-mapping> </web-app>
实现结果: