首先、簡單的了解session和cookie的區別:
一、session和cookie的區別:
session是把用戶的首寫到用戶獨占的session中(服務器端)
cookie是把用戶的數據寫給用戶的瀏覽器。
session對象由服務器創建,開發人員可以調用request對象的getsession方法得到session對象。
首先寫頁面代碼,仍然借助於商品瀏覽記錄來寫:
1、jsp購買頁面代碼如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page import="java.util.*"%> <!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>購物頁面</title> </head> <body> <h1>商品列表</h1> <ul > <li><a href="/myday07/addcookie?id=1">java基礎</a><a href="/myday07/buysession?id=1">購買</a></li> <li><a href="/myday07/addcookie?id=2">javaweb</a><a href="/myday07/buysession?id=2">購買</a></li> <li><a href="/myday07/addcookie?id=3">DHTML</a><a href="/myday07/buysession?id=3">購買</a></li> <li><a href="/myday07/addcookie?id=4">數據庫</a><a href="/myday07/buysession?id=4">購買</a></li> <li><a href="/myday07/addcookie?id=5">Struts</a><a href="/myday07/buysession?id=5">購買</a></li> <li><a href="/myday07/addcookie?id=6">Spring</a><a href="/myday07/buysession?id=6">購買</a></li> <li><a href="/myday07/addcookie?id=7">Hibernate</a><a href="/myday07/buysession?id=7">購買</a></li> </ul> <h1>最近訪問記錄</h1><h5><a href="/myday07/clearcookie">清空數據</a> </h5> <% String[] arr = {"java基礎","javaweb","DHTML","數據庫","Struts","Spring","Hibernate"}; // 獲得所有cookie Cookie[] cookies = request.getCookies(); // 在cookie中查找商品瀏覽記錄 String visitlist = null; if(cookies!=null){ for (Cookie cookie : cookies) { if (cookie.getName().equals("visitlist")) { visitlist = cookie.getValue(); break; } } if(visitlist==null){ // 商品列表不存在 out.println("無"); }else{ String[] existIds = visitlist.split(","); for(String existId:existIds){ int id = Integer.parseInt(existId); out.println(arr[id-1]+"<br/>"); } } } %> <hr> <h1>購物車列表</h1> <% //1.獲得購物車列表 Map<String, Integer> cart=(Map<String, Integer>)session.getAttribute("cart"); //2.遍歷map輸出 if(cart!=null){ Set<String> keys=cart.keySet(); for(String id:keys) { int number=cart.get(id);//每件商品的數量 int idInt=Integer.parseInt(id); String productName=arr[idInt-1]; out.println("商品名稱:"+productName+",商品數量:"+number+"<br/>"); } } %> <hr/> </body> </html>
2、編寫商品瀏覽記錄的servlet頁面
package cn.itcast.cookie; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class addCookie extends HttpServlet { // 獲得用戶當前訪問商品,更新到商品瀏覽記錄列表 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 自動刷新 response.setHeader("refresh", "2;url=/myday07/products1.jsp"); // 1、獲得當前用戶瀏覽商品id String id = request.getParameter("id"); // 2、獲得用戶瀏覽記錄列表 Cookie[] cookies = request.getCookies(); // 查找訪問記錄列表 name:visitlist ----- 1,3,5,6 String visitlist = null; if (cookies != null) { // 存在cookie for (Cookie cookie : cookies) { if (cookie.getName().equals("visitlist")) { visitlist = cookie.getValue(); break; } } if (visitlist == null) { // 列表不存在,當前商品第一件商品 Cookie cookie = new Cookie("visitlist", id); cookie.setMaxAge(60 * 60); response.addCookie(cookie); response.getWriter().println("add success"); } else { // 3、判斷當前商品是否已經在列表中 String[] existIds = visitlist.split(","); for (String exsitId : existIds) { if (exsitId.equals(id)) { // id存在在列表中 response.getWriter().println("add success"); return; } } // 4、如果當前商品不在列表中,添加到列表 Cookie cookie = new Cookie("visitlist", visitlist + "," + id); cookie.setMaxAge(60 * 60); response.addCookie(cookie); response.getWriter().println("add success"); } } else { // 表示 並沒有該站點的任何cookie Cookie cookie = new Cookie("visitlist", id); cookie.setMaxAge(60 * 60); response.addCookie(cookie); response.getWriter().println("add success"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
3、編寫清除緩存的cookie頁面
package cn.itcast.cookie; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class clearCookie extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Cookie cookie=new Cookie("visitlist",""); cookie.setMaxAge(0); response.addCookie(cookie); response.sendRedirect("/myday07/products1.jsp"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
4、編寫商品購買頁面
package cn.itcast.cookie; import java.io.IOException; import java.util.HashMap; import java.util.Map; 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 BuySession extends HttpServlet { //添加商品到購物車 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.獲得商品的id String id=request.getParameter("id"); //2.獲得購物車cart--從session得到 HttpSession session=request.getSession(); Map<String, Integer> cart=(Map<String, Integer>)session.getAttribute("cart");//如果session中沒有購物車呢 if(cart==null) {//原來的session中並不存在購物車 cart=new HashMap<String, Integer>(); } //3.判斷商品是否存在購物車中 if(cart.containsKey(id)) { //4.存在數量+1 int number=cart.get(id); cart.put(id, number+1); }else{ //5.不存在 將商品存入購物車 數量1 cart.put(id, 1); } session.setAttribute("cart", cart); response.sendRedirect("/myday07/products1.jsp");//重定向回去 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
最終效果如下: