Java SE 6 中實現 Cookie 功能

來源:互聯網
上載者:User

來源:http://www.study-code.com/java/j2se/66422.htm

 

頭一段時間,為了在 Java 中實現 Cookie 的功能,看了若干規範文檔,寫了大量的代碼,才勉強將其搞定。今天看到文章才知道 Java SE 6 中為了實現 Cookie 功能,提供了若干現成的類,以後誰要是再想寫 Cookie 可就有福了啊。

註:下面的內容摘自developerworks的“Java SE 6 新特性: HTTP 增強”部分內容。具體地址:http://www.ibm.com/developerworks/cn/java/j-lo-jse62/index.html

Cookie 是 Web 應用程式當中非常常用的一種技術,用於儲存某些特定的使用者資訊。雖然,我們不能把一些特別敏感的資訊存放在 Cookie 裡面,但是,Cookie 依然可以協助我們儲存一些瑣碎的資訊,協助 Web 使用者在訪問網頁時獲得更好的體驗,例如個人的搜尋參數,顏色偏好以及上次的訪問時間等等。網路程式開發人員可以利用 Cookie 來建立有狀態的網路會話(Stateful Session)。 Cookie 的應用越來越普遍。在 Windows 裡面,我們可以在“Documents And Settings”檔案夾裡面找到IE使用的 Cookie,假設使用者名稱為 admin,那麼在 admin 檔案夾的 Cookies 檔案夾裡面,我們可以看到名為“admin@(domain)”的一些檔案,其中的 domain 就是表示建立這些 Cookie 檔案的網路域, 檔案裡面就儲存著使用者的一些資訊。

JavaScript 等指令碼語言對 Cookie 有著很不錯的支援。 .NET 裡面也有相關的類來支援開發人員對 Cookie 的管理。 不過,在 Java SE 6 之前, Java一直都沒有提供 Cookie 管理的功能。在 Java SE 5 裡面, java.net 包裡面有一個 CookieHandler 抽象類別,不過並沒有提供其他具體的實現。到了 Java SE 6, Cookie 相關的管理類在 Java 類庫裡面才得到了實現。有了這些 Cookie 相關支援的類,Java 開發人員可以在伺服器端編程中很好的操作 Cookie, 更好的支援 HTTP 相關應用,建立有狀態的 HTTP 會話。

用 HttpCookie 代表 Cookie
java.net.HttpCookie 類是 Java SE 6 新增的一個表示 HTTP Cookie 的新類, 其對象可以表示 Cookie 的內容, 可以支援所有三種 Cookie 規範:

Netscape 草案
RFC 2109 - http://www.ietf.org/rfc/rfc2109.txt
RFC 2965 - http://www.ietf.org/rfc/rfc2965.txt
這個類儲存了 Cookie 的名稱,路徑,值,協議版本號碼,是否到期,網路域,最大生命期等等資訊。

用 CookiePolicy 規定 Cookie 接受策略
java.net.CookiePolicy 介面可以規定 Cookie 的接受策略。 其中唯一的方法用來判斷某一特定的 Cookie 是否能被某一特定的地址所接受。 這個類內建了 3 個實現的子類。一個類接受所有的 Cookie,另一個則拒絕所有,還有一個類則接受所有來自原地址的 Cookie。

用CookieStore 儲存 Cookie
java.net.CookieStore 介面負責儲存和取出 Cookie。 當有 HTTP 要求的時候,它便儲存那些被接受的 Cookie; 當有 HTTP 回應的時候,它便取出相應的 Cookie。 另外,當一個 Cookie 到期的時候,它還負責自動刪去這個 Cookie。

用 CookieManger/CookieHandler 管理 Cookie
java.net.CookieManager 是整個 Cookie 管理機制的核心,它是 CookieHandler 的預設實現子類。

一個 CookieManager 裡面有一個 CookieStore 和一個 CookiePolicy,分別負責儲存 Cookie 和規定策略。使用者可以指定兩者,也可以使用系統預設的 CookieManger。

例子
下面這個簡單的例子說明了 Cookie 相關的管理功能:

// 建立一個預設的 CookieManager
CookieManager manager = new CookieManager();

// 將規則改掉,接受所有的 Cookie
manager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);

// 儲存這個定製的 CookieManager
CookieHandler.setDefault(manager);
       
// 接受 HTTP 要求的時候,得到和儲存新的 Cookie
HttpCookie cookie = new HttpCookie("...(name)...","...(value)...");
manager.getCookieStore().add(uri, cookie);
       
// 使用 Cookie 的時候:
// 取出 CookieStore       
CookieStore store = manager.getCookieStore();

// 得到所有的 URI       
List<URI> uris = store.getURIs();
for (URI uri : uris) {
 // 篩選需要的 URI
 // 得到屬於這個 URI 的所有 Cookie
 List<HttpCookie> cookies = store.get(uri);
 for (HttpCookie cookie : cookies) {
  // 取出了 Cookie
 }
}
       
// 或者,取出這個 CookieStore 裡面的全部 Cookie
// 到期的 Cookie 將會被自動刪除
List<HttpCookie> cookies = store.getCookies();
for (HttpCookie cookie : cookies) {
 // 取出了 Cookie

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.