文章目錄
- 一、Cookie介紹:
-
-
- 1.作用
- 2.特點:
- 3.注意:
-
- 二、Cookie的簡單使用:
-
-
- 1.Cookie建立
- 2.Cookie擷取
-
- 相關
一、Cookie介紹:
HTTP協定時沒有記憶的,一次請求結束後,相關的資料就銷毀沒了。如果第二次請求的時候需要使用相同的資料,難道需要再寫一下請求一下嗎?比如你登入後,每一次頁面點選都需要登入這多麻煩。
也就是說如果需要儲存一下使用者的請求資料該怎麼解決呢?
1.作用
使用Cookie,解決了不同請求間的資料共享問題。
我們把請求需要的共享的請求資料存儲再浏覽器端,避免使用者進行重複的資料書寫操作。
Cookie技術是浏覽器端的資料存儲技術。解決了不同請求需要使用相同的請求資料的問題。
2.特點:
- 不安全
- 适合存儲鍵值對形式的少量資料
- 他是浏覽器端的資料存儲技術,但存儲的資料聲明在伺服器端。
3.注意:
-
設定多個Cookie存儲
一個Cookie對象存儲一條資料。如果需要存儲多條資料,可以多new幾個Cookie對象進行存儲。以下是建立Cookie的形式
Cookie c1 = new Cookie("key1", "value1");
Cookie c2 = new Cookie("key2", "value2");
-
設定Cookie存儲的時間
臨時存儲:不設定 cookie 資訊的存儲時間,則該Cookie生命周期為一次會話,存儲在浏覽器記憶體中。浏覽器關閉時Cookie失效。
定時存儲:設定了Cookie的有效期,存儲在使用者的電腦硬碟中。在有效期内,符合路徑要求的請求都會附帶該Cookie資訊。
- 設定什麼路徑下攜帶該Cookie資訊。不設定預設是每次請求都會攜帶
備注:重新開機伺服器Cookie資訊是不會失效的,因為Cookie是存放在浏覽器端的。如果你在測試時Cookie資訊一直在。你可以将浏覽器的緩存清除一下。
二、Cookie的簡單使用:
1.Cookie建立
- 代碼
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Cookie學習:Cookie解決了不同請求的資料共享問題。
*
* @author changsheng
*/
@WebServlet("/CookieServlet")
public class CookieServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1.設定請求編碼格式
req.setCharacterEncoding("utf-8");
// 2.設定響應編碼格式
resp.setHeader("content-type", "text/html;charset=utf-8");
// 3.擷取請求資訊
// 4.處理請求資訊
Cookie c1 = new Cookie("temporaryUsername", "Zhangsan"); // 臨時存儲:将請求中的temporaryUsername參數存放到cookie中
Cookie c2 = new Cookie("timingKey", "5minutes"); // 定時存儲:将請求中的timingKey參數存放到cookie中
c2.setMaxAge(60*5); // 存儲5分鐘,5分鐘後這個Cookie失效。60秒*5
c1.setPath("/"); // 在此路徑下都帶上c1這個Cookie資訊
c2.setPath("/"); // 在此路徑下都帶上c2這個Cookie資訊
// 5.響應處理結果
resp.addCookie(c1); // 響應Cookie資訊c1給用戶端
resp.addCookie(c2); // 響應Cookie資訊c2給用戶端
resp.getWriter().write("Cookie學習!");
}
-
運作
通路CookieServlet(Servlet),此時會顯示已經設定了Cookie資訊在這裡面。分别是temporaryUsername和timingKey。
響應處理結果時,代碼中不要忘記加這兩行
resp.addCookie(c1); // 響應Cookie資訊c1給用戶端
resp.addCookie(c2); // 響應Cookie資訊c2給用戶端
如果此時随便打一個路徑還是可以看到Cookie資訊。
假設此時關閉了浏覽器,然後重新打開這個随便打的網站,則沒有設定時間的Cookie會消失。
原因:
沒有設定有效時間的Cookie是存儲在浏覽器的運作記憶體中的,浏覽器關閉的時候就失效了。
設定了有效時間的Cookie是存儲在用戶端的硬碟中的。在有效期内,符合路徑要求的請求都會附帶上這個Cookie資訊。
設定Cookie有效期代碼:
Cookie c2 = new Cookie("timingKey", "5minutes"); // 定時存儲:将請求中的timingKey參數存放到cookie中
c2.setMaxAge(1000*60*5); // 存儲5分鐘,5分鐘後這個Cookie失效
如果設定的Cookie有效期時間到了,那麼Cookie資訊也就失效了。Cookie也會消失。
如果此時你再次重新通路了 /CookieServlet那麼又會重新增加Cookie。就又有Cookie資訊了!
2.Cookie擷取
使用如下代碼擷取所有Cookie資訊,然後周遊一下即可。
通路 /GetCookieDataServlet即可擷取所有Cookie資訊
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Cookie學習:擷取所有Cookie資訊
*
* @author changsheng
*/
@WebServlet("/GetCookieDataServlet")
public class GetCookieDataServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1.設定請求編碼格式
req.setCharacterEncoding("utf-8");
// 2.設定響應編碼格式
resp.setHeader("content-type", "text/html;charset=utf-8");
// 3.擷取請求資訊
// 4.處理請求資訊
StringBuilder out = new StringBuilder(); // 存放所有Cookie資訊
Cookie[] cookies = req.getCookies(); // 擷取所有Cookie資訊
if (null != cookies) { // 如果不為空則周遊
for (int i = 0; i < cookies.length; i++) {
out.append(cookies[i].getName()+":"+cookies[i].getValue()+"\n");
}
}
// 5.響應處理結果
System.out.println("所有Cookie資訊為:\n"+out);
resp.getWriter().write("所有Cookie資訊為:\n"+out);
}
}
相關
更多Java EE基礎的 Servlet與JSP相關 請點選:【Servlet + JSP】 目錄