Cookie是在多個用戶端請求之間持久儲存的一小段資訊。
Cookie具有名稱,單個值和可選屬性,例如注釋,路徑和域限定符,生存週期和版本號。
預設情況下,每個請求都被視為新的請求。在cookie技術中,servlet響應可以新增cookie。 所以cookie儲存在瀏覽器的快取中。之後,如果使用者發出請求,預設情況下會帶上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的名稱。建立後無法更改名稱。 |
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。下面來看看建立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,建立一個動態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已在瀏覽器中設定,現在跳轉到第二個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值如下 -