官术网_书友最值得收藏!

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來存儲客戶端數據這樣的一個方式,將會使得在設計交互式網頁時更能得心應手!

主站蜘蛛池模板: 夏津县| 安康市| 囊谦县| 德江县| 临安市| 汽车| 鲁山县| 阜阳市| 道孚县| 香港| 濮阳县| 阿克苏市| 滕州市| 西充县| 柯坪县| 长岭县| 乐平市| 五华县| 西宁市| 高州市| 大埔区| 长子县| 天台县| 苏州市| 平顺县| 华亭县| 个旧市| 汉沽区| 祥云县| 天柱县| 嘉祥县| 五常市| 娄烦县| 大港区| 大庆市| 大同市| 资源县| 中超| 手游| 平南县| 石河子市|