1. 程式人生 > >Servlet(六):Cookie

Servlet(六):Cookie

Cookie 學習:
問題:
  HTTP 協議是沒有記憶功能的,一次請求結束後,相關資料會被銷燬。如果第二次的請求需要使用相同的請求資料怎麼辦呢?難道是讓使用者再次請求書寫嗎?
解決:
  使用 Cookie 技術
解釋:
  Cookie 技術其實是瀏覽器端的資料儲存技術,解決了不同請求需要使用相同的請求資料的問題。我們把請求需要共享的請求資料,儲存在瀏覽器端,避免使用者進行重複的書寫請求資料。但是哪些資料需要使用 Cookie 技術儲存起來是一個主觀問題,需要在後臺進行響應的時候來告訴瀏覽器,有些資料其他請求還會使用,需要儲存起來。
特點:
  瀏覽器端的資料儲存技術
  適合少量資料
  鍵值對
  不安全
使用:
  Cookie 資料儲存:
          臨時儲存:
            不設定 cookie 資訊的儲存時間,週期為一次會話,
          儲存在瀏覽器記憶體中
          定時儲存:
            設定儲存時間,週期為時間設定,儲存在使用者電腦中。
  Cookie 資料獲取:
總結:
  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;
/**
 * Cookie學習:
 *         作用:解決了傳送的不同請求的資料共享問題
 *         使用:
 *             Cookie的建立和儲存
 *                 //建立Cookie物件
 *                     Cookie c=new Cookie(String name, String value);
 *                 //設定cookie(可選)
 *                     //設定有效期
 *                     c.setMaxAge(int seconds);
 *                    //設定有效路徑
 *                    c.setPath(String uri)
 *                //響應Cookie資訊給客戶端
 *                    resp.addCookie(c);
 *            Cookie的獲取
 *                //獲取Cookie資訊陣列
 *                Cookie[] cks=req.getCookies();
 *                //遍歷陣列獲取Cookie資訊
 *                    使用for迴圈遍歷即可,示例:
                         if(cks!=null){
                            for(Cookie c:cks){
                                String name=c.getName();
                                String value=c.getValue();
                                System.out.println(name+":"+value);
                            }
                        }
 *        注意:
 *            一個Cookie物件儲存一條資料。多條資料,可以多建立幾個Cookie物件進行儲存。
 *        特點:
 *            瀏覽器端的資料儲存技術。
 *            儲存的資料宣告在伺服器端。
 *            臨時儲存:儲存在瀏覽器的執行記憶體中,瀏覽器關閉即失效。
 *            定時儲存:設定了Cookie的有效期,儲存在客戶端的硬碟中,在有效期內符合路徑要求的請求都會附帶該資訊。
 *            預設cookie資訊儲存好之後,每次請求都會附帶,除非設定有效路徑
 * 
@author MyPC * */ public class CookieServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //設定請求編碼格式 req.setCharacterEncoding("utf-8"); //設定響應編碼格式 resp.setContentType("text/html;charset=utf-8");
//獲取請求資訊 //處理請求資訊 //響應處理結果 //使用Cookie進行瀏覽器端的資料儲存 //建立Cookie物件 Cookie c=new Cookie("mouse", "thinkpad"); Cookie c2=new Cookie("key", "bjsxt"); //設定Cookie //設定Cookie的有效期 c2.setMaxAge(3*24*3600); //設定有效路徑 c2.setPath("/cookie/gc"); //響應Cookie資訊 resp.addCookie(c); resp.addCookie(c2); //直接響應 resp.getWriter().write("Cookie學習"); //請求轉發 //重定向 } }

 

//獲取Cookie資訊
                Cookie[] cks=req.getCookies();
                if(cks!=null){
                    for(Cookie c:cks){
                        String name=c.getName();
                        String value=c.getValue();
                        System.out.println(name+":"+value);
                    }
                }