- JSP應用與開發技術(第3版)
- 馬建紅 李學相 韓穎 王瑞娟 張晗
- 1437字
- 2020-06-30 17:13:27
5.2 在JSP中使用Cookie
Cookie實質是服務器端與客戶端之間傳送的普通HTTP頭,可以保存也可以不保存在客戶的硬盤上。如果保存,是每個文件大小不超過4KB的文本文件,多個Cookie可保存到同一個文件中。從編程角度來看,在JSP中,Cookie就是Java提供的一個類。
5.2.1 創建Cookie
Cookie是由Javax.servlet.http.Cookie類所衍生出來的對象,建立Cookie的語法如下:
Cookie objCookie = new Cookie(indexValue,stringValue)
從上面的語法可以看出,一個Cookie對象必須包含一個特定的indexValue索引值與字符串類型的數據內容stringValue,例如:
Cookie c = new Cookie("mycookie","Cookie Test");
建立了Cookie之后,該Cookie數據還必須傳送到客戶端,用addCookie()方法發送一個HTTP Header。傳送的方式為response.addCookie(objCookie)。
response對象與request對象均提供與Cookie相關的方法成員,利用這些成員,用戶可以很方便地訪問指定的Cookie內容。上述的程序片段利用response的addCookie()方法將指定的Cookie對象傳送至客戶端。
5.2.2 讀寫Cookie
1. 寫Cookie
對Cookie進行操作首先是將Cookie保存到客戶端。在JSP編程中,利用response對象通過addCookie()方法將Cookie寫入客戶端。其語法格式如下:
response.addCookie(cookie);
例如:
<%//從提交的HTML表單中獲取用戶名 String username=request.getParameter(name); Cookie user_name=new Cookie("cookie_name",username);//創建一個Cookie response.addCookie(user_name); %>
2. 讀Cookie
將Cookie保存到客戶端,就是為了以后得到其中保存的數據。調用HttpServletRequest的getCookies得到一個Cookie對象的數組。其語法格式如下:
Cookie[] 數組變量名=request.getCookies();
在客戶端傳來的Cookie數據類型都是數組類型,因此要得到其中某一項指定的Cookie對象,需要遍歷數組來找。JSP將調用request.getCookies()從客戶端讀入Cookie,getCookies()方法返回一個HTTP請求頭中的內容對應的Cookie對象數組。用戶只需要用循環訪問該數組的各個元素,調用getName()方法檢查各個Cookie的名字,直至找到目標Cookie,然后對該Cookie調用getValue()方法取得與指定名字關聯的值,可通過如下代碼實現:

5.2.3 Cookie中的主要方法
在JSP中,通過Cookie.setXXX設置各種屬性,使用Cookie.getXXX讀出Cookie的屬性,Cookie的主要方法及其說明如表5-1所示。
表5-1 Cookie的主要方法及其說明

5.2.4 操作Cookie的常用方法
下面介紹幾個操作Cookie的常用方法,這些方法雖然簡單,但是在使用Cookie時很有用。
1. 設置Cookie的存在期限
Cookie可以保持登錄信息到用戶下次與服務器會話,換句話說,下次訪問同一網站時,用戶會發現不必輸入用戶名和密碼就已經登錄了(當然,不排除用戶手工刪除Cookie)。而還有一些Cookie在用戶退出會話的時候就被刪除了,這樣可以有效保護個人隱私。
Cookie在生成時會被指定一個Expire值,這就是Cookie的生存周期,在這個周期內Cookie有效,超出周期Cookie就會被清除。有效周期的時間以秒為單位,時間設置越大,表示Cookie對象的有效時間越長,如果把有效周期設置為0,則表示此Cookie對象存放在瀏覽器后將立即失效,如果把有效周期設置為任意一個負數,則當瀏覽器關閉后,此Cookie對象立即失效。在默認情況下,Cookie是隨著用戶關閉瀏覽器而自動消失的,不過,Cookie也可以設置其存在的期限,讓用戶在下次打開網頁時,服務器端仍然能夠取得同樣一個Cookie中的數據內容。
下面的代碼使用setMaxAge()方法設置Cookie對象login在一天之內都是有效的:
<% Cookie login = new Cookie("today","true"); login.setMaxAge(86400); response.addCookie(login); %>
如果希望Cookie能夠在瀏覽器退出時自動保存下來,則可以用下面的LongLivedCookie類來取代標準的LongLivedCookie類。LongLivedCookie類的代碼如下:

如果不設置過期時間,則表示這個Cookie生命周期為瀏覽器會話期間,只要關閉瀏覽器,Cookie就會消失。這種生命期為瀏覽會話期的Cookie被稱為會話Cookie。會話Cookie一般不保存在硬盤上,而是保存在內存里。如果設置了過期時間,瀏覽器就會把Cookie保存到硬盤上,關閉后再次打開瀏覽器,這些Cookie依然有效,直到超過設定的過期時間。存儲在硬盤上的Cookie可以在不同的瀏覽器進程間共享,比如兩個IE窗口。而對于保存在內存的Cookie,不同的瀏覽器有不同的處理方式。
2. 刪除Cookie
要刪除某一個客戶端的Cookie,必須使用前面的sexMaxAge()方法,并將Cookie的存在期限設為0,語法如下:
Cookie名稱.setMaxAge(0)
下面的代碼在JSP中刪除一個Cookie:
<% Cookie killMyCookie = new Cookie("mycookie", null); killMyCookie.setMaxAge(0); killMyCookie.setPath("/"); response.addCookie(killMyCookie); %>
3. 獲取指定名字的Cookie值
下面的代碼可以獲取指定名字的Cookie值:

本節介紹了在JSP中使用Cookie,用戶若能善用以Cookie來存儲客戶端數據這樣的一個方式,將會使得在設計交互式網頁時更能得心應手!
- 高手是如何做產品設計的(全2冊)
- 零基礎PHP學習筆記
- PySide GUI Application Development(Second Edition)
- Getting Started with React Native
- Practical Game Design with Unity and Playmaker
- .NET 4.5 Parallel Extensions Cookbook
- Arduino可穿戴設備開發
- App Inventor 2 Essentials
- Windows Phone 8 Game Development
- Visual Basic程序設計全程指南
- Visual C++開發寶典
- Shopify Application Development
- Java程序設計入門(第2版)
- Java程序設計
- C語言程序設計