天天看點

Java EE基礎(12):Cookie對象介紹與使用一、Cookie介紹:二、Cookie的簡單使用:相關

文章目錄

  • 一、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給用戶端
           
Java EE基礎(12):Cookie對象介紹與使用一、Cookie介紹:二、Cookie的簡單使用:相關

如果此時随便打一個路徑還是可以看到Cookie資訊。

Java EE基礎(12):Cookie對象介紹與使用一、Cookie介紹:二、Cookie的簡單使用:相關

假設此時關閉了浏覽器,然後重新打開這個随便打的網站,則沒有設定時間的Cookie會消失。

原因:

  沒有設定有效時間的Cookie是存儲在浏覽器的運作記憶體中的,浏覽器關閉的時候就失效了。

  設定了有效時間的Cookie是存儲在用戶端的硬碟中的。在有效期内,符合路徑要求的請求都會附帶上這個Cookie資訊。

設定Cookie有效期代碼:

Cookie c2 = new Cookie("timingKey", "5minutes"); // 定時存儲:将請求中的timingKey參數存放到cookie中
c2.setMaxAge(1000*60*5); // 存儲5分鐘,5分鐘後這個Cookie失效
           
Java EE基礎(12):Cookie對象介紹與使用一、Cookie介紹:二、Cookie的簡單使用:相關

如果設定的Cookie有效期時間到了,那麼Cookie資訊也就失效了。Cookie也會消失。

Java EE基礎(12):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】 目錄