天天看點

Servlet Cookie 處理

Cookie 是存儲在用戶端計算機上的文本檔案,并保留了各種跟蹤資訊。Java Servlet 顯然支援 HTTP Cookie。

識别傳回使用者包括三個步驟:

伺服器腳本向浏覽器發送一組 Cookie。例如:姓名、年齡或識别号碼等。

浏覽器将這些資訊存儲在本地計算機上,以備将來使用。

當下一次浏覽器向 Web 伺服器發送任何請求時,浏覽器會把這些 Cookie 資訊發送到伺服器,伺服器将使用這些資訊來識别使用者。

本章将向您講解如何設定或重置 Cookie,如何通路它們,以及如何将它們删除。

Servlet Cookie 處理需要對中文進行編碼與解碼,方法如下:

Cookie 通常設定在 HTTP 頭資訊中(雖然 JavaScript 也可以直接在浏覽器上設定一個 Cookie)。設定 Cookie 的 Servlet 會發送如下的頭資訊:

正如您所看到的,Set-Cookie 頭包含了一個名稱值對、一個 GMT 日期、一個路徑和一個域。名稱和值會被 URL 編碼。expires 字段是一個指令,告訴浏覽器在給定的時間和日期之後"忘記"該 Cookie。

如果浏覽器被配置為存儲 Cookie,它将會保留此資訊直到到期日期。如果使用者的浏覽器指向任何比對該 Cookie 的路徑和域的頁面,它會重新發送 Cookie 到伺服器。浏覽器的頭資訊可能如下所示:

Servlet 就能夠通過請求方法 request.getCookies() 通路 Cookie,該方法将傳回一個 Cookie 對象的數組。

以下是在 Servlet 中操作 Cookie 時可使用的有用的方法清單。

序号

方法 & 描述

1

<b>public void setDomain(String pattern)</b>

該方法設定 cookie 适用的域,例如 runoob.com。

2

<b>public String getDomain()</b>

該方法擷取 cookie 适用的域,例如 runoob.com。

3

<b>public void setMaxAge(int expiry)</b>

該方法設定 cookie 過期的時間(以秒為機關)。如果不這樣設定,cookie 隻會在目前 session 會話中持續有效。

4

<b>public int getMaxAge()</b>

該方法傳回 cookie 的最大生存周期(以秒為機關),預設情況下,-1 表示 cookie 将持續下去,直到浏覽器關閉。

5

<b>public String getName()</b>

該方法傳回 cookie 的名稱。名稱在建立後不能改變。

6

<b>public void setValue(String newValue)</b>

該方法設定與 cookie 關聯的值。

7

<b>public String getValue()</b>

該方法擷取與 cookie 關聯的值。

8

<b>public void setPath(String uri)</b>

該方法設定 cookie 适用的路徑。如果您不指定路徑,與目前頁面相同目錄下的(包括子目錄下的)所有 URL 都會傳回 cookie。

9

<b>public String getPath()</b>

該方法擷取 cookie 适用的路徑。

10

<b>public void setSecure(boolean flag)</b>

該方法設定布爾值,表示 cookie 是否應該隻在加密的(即 SSL)連接配接上發送。

11

<b>public void setComment(String purpose)</b>

設定cookie的注釋。該注釋在浏覽器向使用者呈現 cookie 時非常有用。

12

<b>public String getComment()</b>

擷取 cookie 的注釋,如果 cookie 沒有注釋則傳回 null。

通過 Servlet 設定 Cookie 包括三個步驟:

<b>(1) 建立一個 Cookie 對象:</b>您可以調用帶有 cookie 名稱和 cookie 值的 Cookie 構造函數,cookie 名稱和 cookie 值都是字元串。

請記住,無論是名字還是值,都不應該包含空格或以下任何字元:

<b>(2) 設定最大生存周期:</b>您可以使用 setMaxAge 方法來指定 cookie 能夠保持有效的時間(以秒為機關)。下面将設定一個最長有效期為 24 小時的 cookie。

<b>(3) 發送 Cookie 到 HTTP 響應頭:</b>您可以使用 <b>response.addCookie</b> 來添加 HTTP 響應頭中的 Cookie,如下所示:

讓我們修改我們的 表單資料執行個體,為名字和姓氏設定 Cookie。

編譯上面的 Servlet <b>HelloForm</b>,并在 web.xml 檔案中建立适當的條目:

最後嘗試下面的 HTML 頁面來調用 Servlet。

儲存上面的 HTML 内容到檔案 /TomcatTest/test.html 中。

接下來我們通路http://localhost:8080/TomcatTest/test.html,Gif 示範如下:

Servlet Cookie 處理
注意:以上的一些路徑需要根據你項目實際路徑修改。

要讀取 Cookie,您需要通過調用 HttpServletRequest 的 <b>getCookies( )</b> 方法建立一個 javax.servlet.http.Cookie 對象的數組。然後循環周遊數組,并使用 getName() 和 getValue() 方法來通路每個 cookie 和關聯的值。

讓我們讀取上面的執行個體中設定的 Cookie

編譯上面的 Servlet <b>ReadCookies</b>,并在 web.xml 檔案中建立适當的條目。嘗試運作 http://localhost:8080/TomcatTest/ReadCookies,将顯示如下結果:

Servlet Cookie 處理

删除 Cookie 是非常簡單的。如果您想删除一個 cookie,那麼您隻需要按照以下三個步驟進行:

讀取一個現有的 cookie,并把它存儲在 Cookie 對象中。

使用 <b>setMaxAge()</b> 方法設定 cookie 的年齡為零,來删除現有的 cookie。

把這個 cookie 添加到響應頭。

下面的例子将删除現有的名為 "url" 的 cookie,當您下次運作 ReadCookies 的 Servlet 時,它會傳回 url 為 null。

編譯上面的 Servlet <b>DeleteCookies</b>,并在 web.xml 檔案中建立适當的條目。現在運作 http://localhost:8080/TomcatTest/DeleteCookies,将顯示如下結果:

Servlet Cookie 處理