Servlet(六):Cookie
阿新 • • 發佈:2018-12-12
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); } }