Cookie是一小塊可以嵌入HTTP請求和響應(yīng)的數(shù)據(jù)。它在服務(wù)器上產(chǎn)生,并作為響應(yīng)頭域的一部分返回給客戶。瀏覽器在收到有Cookie的響應(yīng)后,會把Cookie的內(nèi)容以"要害字/值"的形式寫入到一個專為存放Cookie的文本文件中。瀏覽器會把Cookie的信息與請求發(fā)送給服務(wù)器,這樣服務(wù)器就可以再次讀取Cookie中存放的數(shù)據(jù)了。Cookie可以對有效期進行設(shè)置,瀏覽器不會把過期的Cookie發(fā)送給服務(wù)器。
Servlet API提供了一個Cookie類,封裝了對Cookie的基本操作。如下所示。
java.lang.Object
-javax.servlet.http.Cookie
public class Cookie extends Object implements Cloneable
Cookie類的方法如表14-4所示。
表14-4 Cookie類的方法
方 法 意 義
Cookie(String, String) 生成一個有名和值的Cookie
clone() 返回當(dāng)前對象的一個拷貝
getComment() 返回描述該Cookie的注釋,沒有就為空
getDomain() 返回該Cookie的域名
getMaxAge() 返回該Cookie的最大壽命
getName() 返回該Cookie的名字
getPath() 返回使用該Cookie的所有URL前綴
getSecure() 返回該Cookie的安全標志
getValue() 返回該Cookie的值
getVersion() 返回該Cookie的版本
setComment(String) 設(shè)置描述該Cookie的注釋
setDomain(String) 設(shè)置該Cookie的域名
setMaxAge(int) 設(shè)置該Cookie的最大壽命
setPath(String) 設(shè)置該Cookie只能被從使用該URL前綴的請求提出
setSecure(boolean) 設(shè)置該Cookie的安全標志
setValue(String) 設(shè)置該Cookie的值
setVersion(int) 設(shè)置該Cookie所使用的協(xié)議的版本號
實例:使用Cookie的Servlet程序
下面的程序示例14-6就是對Cookie的基本運用。
【程序源代碼】
1 // ==================== PRogram Description ======================
2 // 程序名稱:示例14-6: CookieCounter.java
3 // 程序目的:編寫Cookie的Servlet程序
4 // ==========================================================
5 package test.cookie;
6
7 import java.io.*;
8 import java.util.*;
9 import javax.servlet.*;
10 import javax.servlet.http.*;
11
12 public class CookieCounter extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
14 super.init(config);
15 }
16
public void service(HttpServletRequest request,
HttpServletResponse response) throws
18 IOException {
boolean cookieFound = false;
20 Cookie thisCookie = null;
21 response.setContentType("text/Html;charset=gb2312;");
22 PrintWriter out = response.getWriter();
23
24 Cookie[] cookies = request.getCookies();
25 if (cookies != null){
26 for (int i = 0; i < cookies.length; i++) {
27 thisCookie = cookies[0];
if (thisCookie.getName().equals("CookieCount")) {
29 cookieFound = true;
30 break;
31 }
32 }
33 }
34
35 if (cookieFound == false) {
36 thisCookie = new Cookie("CookieCount", "1");
37 thisCookie.setMaxAge(10);
38 response.addCookie(thisCookie);
39 }
40
41 out.println("
新聞熱點
疑難解答