Cookie是在多個客戶端請求之間持久存儲的一小段信息。
Cookie具有名稱,單個值和可選屬性,例如注釋,路徑和域限定符,生存周期和版本號。
默認情況下,每個請求都被視為新的請求。在cookie技術中,servlet響應可以添加cookie。 所以cookie存儲在瀏覽器的緩存中。之后,如果用戶發(fā)出請求,默認情況下會帶上cookie。 因此,我們就可以知道用戶舊用戶。

Servlet中有2種類型的Cookie。
非持久性cookie
持久性Cookie
javax.servlet.http.Cookie類提供了使用Cookie的功能。它為Cookie提供了很多有用的方法。
Cookie類的構造方法
| 構造方法 | 描述 |
|---|---|
Cookie() |
構建一個cookie。 |
Cookie(String name, String value) |
構造具有指定名稱和值的cookie。 |
Cookie類的方法
下面中給出了一些常用的Cookie類方法。
| 方法 | 描述 |
|---|---|
public void setMaxAge(int expiry) |
設置cookie的最大生命周期(以秒為單位)。 |
public String getName() |
返回cookie的名稱。創(chuàng)建后無法更改名稱。 |
public String getValue() |
返回cookie的值。 |
public void setName(String name) |
更改cookie的名稱。 |
public void setValue(String value) |
更改cookie的值。 |
要添加cookie或從cookie獲取值,需要其他接口提供的一些方法。它們分別是:
public void addCookie(Cookie ck):HttpServletResponse接口的方法用于在響應對象中添加cookie。public Cookie[] getCookies():HttpServletRequest接口的方法用于從瀏覽器返回所有的cookie。下面來看看創(chuàng)建cookie的簡單代碼。
Cookie ck=new Cookie("user","maxsu jaiswal");//creating cookie object
response.addCookie(ck);//adding cookie in the response
如何刪除Cookie?
下面來看看刪除cookie的簡單代碼。它主要用于注銷或注銷用戶。
Cookie ck=new Cookie("user","");//deleting value of cookie
ck.setMaxAge(0);//changing the maximum age to 0 seconds
response.addCookie(ck);//adding cookie in the response
下面來看看簡單的代碼用來獲取所有的cookies。
Cookie ck[]=request.getCookies();
for(int i=0;i<ck.length;i++){
out.print("<br>"+ck[i].getName()+" "+ck[i].getValue());//printing name and value of cookie
}
在這個例子中,我們將用戶名稱(username)存儲在cookie對象中,并在另一個servlet中訪問它,會話對應于特定用戶。所以如果從多個瀏覽器訪問指定cookie名稱,那么將得到不同的值。

打開Eclipse,創(chuàng)建一個動態(tài)Web項目:CookieServlet,其完整的項目結構如下 -

以下是幾個主要代碼文件。
文件:index.html -
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Cookies In Servlet</title>
</head>
<body>
<div style="text-align:center;">
<form action="servlet1" method="post">
用戶名:<input type="text" name="username" value="Maxsu"/><input
type="submit" value="提交" />
</form>
</div>
</body>
</html>
文件:FirstServlet.java -
package com.yiibai;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class FirstServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) {
try {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String name = request.getParameter("username");
String username = new String(name.getBytes("ISO-8859-1"),"utf-8");
out.print("<!DOCTYPE html>\r\n" +
"<html>\r\n" +
"<head>\r\n" +
"<meta charset=\"UTF-8\"><body>");
out.print("歡迎您, " + username);
Cookie ck = new Cookie("uname", username);// creating cookie object
response.addCookie(ck);// adding cookie in the response
// creating submit button
out.print("<form action='servlet2' method='post'>");
out.print("<p>Cookies已在瀏覽器中設置,現(xiàn)在跳轉到第二個Servlet中讀取Cookies的值。</p>");
out.print("<input type='submit' value='提交到第二個Servlet'>");
out.print("</form>");
out.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
文件:SecondServlet.java -
package com.yiibai;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class SecondServlet
*/
public class SecondServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
public void doPost(HttpServletRequest request, HttpServletResponse response) {
try {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
Cookie ck[] = request.getCookies();
out.print("Hello " + ck[0].getValue());
out.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
文件:web.xml -
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>CookieServlet</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>FServlet</servlet-name>
<servlet-class>com.yiibai.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FServlet</servlet-name>
<url-pattern>/servlet1</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>SServlet</servlet-name>
<servlet-class>com.yiibai.SecondServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SServlet</servlet-name>
<url-pattern>/servlet2</url-pattern>
</servlet-mapping>
</web-app>
在完成上面代碼編寫后,部署這個Web應用程序,打開瀏覽器訪問URL: http://localhost:8080/CookieServlet , 如是程序沒有錯誤,應該會看到以下結果 -

提交后,看到以下界面 -

在第二個Servlet中讀取的Cookies值如下 -
