[图-1]整体结构图
package cn.itcast; import java.io.IOException; import java.io.PrintWriter; import java.util.Collection; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class ListBookServlet */ public class ListBookServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置中文编码。 response.setContentType ( "text/html;charset=utf-8"); //提示 PrintWriter out = response.getWriter(); Collection<Book> books = BookDB.getAll(); out.write("本站提供的图书有:<br />"); //把数目列出来 for (Book book : books){ String url = "/chapter5/PurchaseServlet?id=" + book. getId (); System.out.println(url); //地址是/chapter5/PurchaseServlet?id=1 out.write (book.getName ()+ "<a href='"+ url+"'>点击购买</a><br />"); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
package cn.itcast; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * Servlet implementation class CartServlet */ public class CartServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public CartServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); PrintWriter out=response.getWriter(); List<Book> cart=null; boolean purFlag=true; HttpSession session=request.getSession(false); if(session==null) { purFlag=false; } else { cart=(List) session.getAttribute("cart"); if(cart==null) { purFlag=false; } } //页面展示 if(!purFlag) { out.write("对不起"); } else { out.write("您购买的书有"); double price=0; for(Book book:cart) { out.write(book.getName()); } } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
package cn.itcast; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; /** * Servlet implementation class PurchaseServlet */ public class PurchaseServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //设置一个ID接受量 String id=request.getParameter("id"); //id没有,就到数目列表页面 if(id==null) { String url="/chapter5/ListBookServlet"; response.sendRedirect(url); return ; } Book book =BookDB.getBook(id); //创建或者获得session对象 HttpSession session =request.getSession(); //从session中获得购物车 List<Book> cart=(List) session.getAttribute("cart"); //创建购物车 if(cart==null) { //首次购买,创建一个购物车 cart=new ArrayList<Book>(); //将购物车存入session对象 session.setAttribute("cart", cart); } //将商品放入购物车 cart.add(book); //创建cookie存放session的标识符 Cookie cookie =new Cookie("jsess",session.getId()); System.out.println(session.getId()); cookie.setMaxAge(60*30); cookie.setPath("/chapter5"); response.addCookie(cookie); //重定向到购物车界面 String url="/chapter5/CartServlet"; response.sendRedirect(url); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
Session创建的时候会返回一个存放此session的id的cookie给浏览器保存在缓存中。
session id会由服务器端写入到cookie中,后期访问服务器端会以此id为标识。cookie失效时间可以服务器端自己设置。
案例中又手动创建了一个Cookie所以又两个Cookie