HttpSession之简易购物车
创建一个简单的购物车模型,由三个 jsp 和两个 Servlet 组成:
step1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h3>Step1:选择要购买的图书</h3> <form action="<%=request.getContextPath() %>/processStep1" method="post"> <table cellpadding="10" cellspacing="0" border="1"> <tr> <td>书名</td> <td>购买</td> </tr> <tr> <td>Java</td> <td><input type="checkbox" name="book" value="Java"/></td> </tr> <tr> <td>Oracle</td> <td><input type="checkbox" name="book" value="Oracle"/></td> </tr> <tr> <td>Struts</td> <td><input type="checkbox" name="book" value="Struts"/></td> </tr> <tr> <td colspan="2"><input type="submit" value="Submit"/></td> </tr> </table> </form> </body> </html>
ProcessStep1Servlet
package com.aff.javaweb; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/processStep1") public class ProcessStep1Servlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取选中的图书信息 String[] books = request.getParameterValues("book");// 多个book 放在数组中 // 把图书信息放入到HttpSession中 request.getSession().setAttribute("books", books); // 重定向页面到shoppingcart/step2.jsp // response.sendRedirect("step2.jsp");//这个为相对路径,在同一目录下没问题的 System.out.println(request.getContextPath() + "/shoppingcart/step2.jsp");///WebCookieT5/shoppingcart/step2.jsp response.sendRedirect(request.getContextPath() + "/shoppingcart/step2.jsp");// 绝对路径 } }
step2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h3>Step2: 请输入寄送地址和信用卡信息</h3> <form action="<%=request.getContextPath() %>/processStep2" method="post"> <table cellpadding="10" cellspacing="0" border="1"> <tr> <td colspan="2">基本信息</td> </tr> <tr> <td>姓名</td> <td><input type="text" name="name" /></td> </tr> <tr> <td>寄送地址</td> <td><input type="text" name="address" /></td> </tr> <tr> <td colspan="2">寄送信用卡信息</td> </tr> <tr> <td >种类</td> <td > <input type="radio" name="cardType" value="visa" />Visa <input type="radio" name="cardType" value="Master" />Master </td> </tr> <tr> <td>卡号</td> <td><input type="text" name="card"/></td> </tr> <tr> <td colspan="2"><input type="submit" value="Submit" /></td> </tr> </table> </form> </body> </html>
ProcessStep2Servlet
package com.aff.javaweb; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/processStep2") public class ProcessStep2Servlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取请求参数 name address cardType card String name = request.getParameter("name"); String address = request.getParameter("address"); String cardType = request.getParameter("cardType"); String card = request.getParameter("card"); // 把上面四个属性封装成一个对象,方便很多 Customer customer = new Customer(name, address, cardType, card);
// 把请求信息传入到HttpSession中 request.getSession().setAttribute("customer", customer); // 重定向页面到confirm.jsp response.sendRedirect(request.getContextPath() + "/shoppingcart/confirm.jsp"); } }
confirm.jsp
<%@page import="com.aff.javaweb.Customer"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% //把之前放入session中的customer对象获取过来 Customer customer = (Customer) session.getAttribute("customer"); String[] books = (String[]) session.getAttribute("books"); %> <table bor> <tr> <td>顾客姓名:</td> <td><%=customer.getName()%></td> </tr> <tr> <td>地址:</td> <td><%=customer.getAddress()%></td> </tr> <tr> <td>卡号:</td> <td><%=customer.getCard()%></td> </tr> <tr> <td>卡的类型:</td> <td><%=customer.getCardType()%></td> </tr> <tr> <td>Books:</td> <td> <% for (String book : books) { out.print(book); out.print("<br>"); } %> </td> </tr> </table> </body> </html>
Customer
package com.aff.javaweb; public class Customer { private String name; private String address; private String cardType; private String card; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getCardType() { return cardType; } public void setCardType(String cardType) { this.cardType = cardType; } public String getCard() { return card; } public void setCard(String card) { this.card = card; } public Customer() { super(); // TODO Auto-generated constructor stub } public Customer(String name, String address, String cardType, String card) { super(); this.name = name; this.address = address; this.cardType = cardType; this.card = card; } @Override public String toString() { return "Customer [name=" + name + ", address=" + address + ", cardType=" + cardType + ", card=" + card + "]"; } }
All that work will definitely pay off