Cookie是由Web服務(wù)器保存在用戶瀏覽器上的小文本文件,它可以包含有關(guān)用戶的信息吧寺。無論何時用戶鏈接到服務(wù)器,Web站點都可以訪問cookie信息。Cookie作為HTTP header的一部分辩撑,其傳輸由HTTP協(xié)議控制。此外仿耽,你還可以控制cookie的有效時間合冀。
可以通過傳遞name和value兩個參數(shù)給Cookie類的構(gòu)造函數(shù)來創(chuàng)建一個cookie:
Cookie cookie = new Cookie(name, value);
創(chuàng)建完一個Cookie對象后,你可以使用setMaxAge方法設(shè)置maxAge屬性项贺,這個屬性決定cookie何時過期君躺。
要將cookie發(fā)送到瀏覽器,需要調(diào)用HttpServletResponse的add方法开缎。
服務(wù)端若要讀取瀏覽器提交的cookie棕叫,可以通過HttpServletRequest接口的getCookies方法,該方法返回一個Cookie數(shù)組啥箭,若沒有cookies則返回null谍珊。你需要遍歷整個數(shù)組來查詢某個特定名稱的cookie。
目前急侥,還沒有通過名稱來獲取cookie的方法來幫助簡化工作砌滞。此外,也沒有一個直接的方法來刪除一個cookie坏怪,你只能創(chuàng)建一個同名的cookie贝润,并將maxAge 屬性設(shè)置為0,并添加到HttpServletResponse接口中铝宵,就像下面這樣:
Cookie cookie = new Cookie("userName", "");
cookie.setMaxAge(0);
response.addCookie(cookie);
現(xiàn)在我們來編寫一個使用cookie來幫助統(tǒng)計用戶訪問某一頁面次數(shù)的Servlet:
package com.mc.hello;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CookieDemoServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
int count = 0;
Cookie[] cookies = request.getCookies();
if(cookies != null) {
for (Cookie cookie : cookies) {
if(cookie.getName().equals("VisitCount")) {
count = Integer.parseInt(cookie.getValue());
break;
}
}
}
count++;
out.print("這是你第" + count + "次訪問這個頁面");
Cookie cookie = new Cookie("VisitCount", "" + count);
response.addCookie(cookie);
}
}
在web.xml中的配置:
<servlet>
<servlet-name>cookie</servlet-name>
<servlet-class>com.mc.hello.CookieDemoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cookie</servlet-name>
<url-pattern>/cookie</url-pattern>
</servlet-mapping>
在瀏覽器地址欄中輸入http://localhost:8080/HelloWorld/cookie即可看到如下頁面:
每刷新一次這個頁面打掘,訪問次數(shù)都會增加一次华畏。但是當(dāng)我們關(guān)閉瀏覽器,然后再次打開瀏覽器尊蚁,并輸入這個頁面的URL時亡笑,頁面上顯示還是第一次訪問這個頁面。這是因為我們沒有設(shè)置cookie的過期時間横朋,當(dāng)我們關(guān)閉瀏覽器的時候cookie就過期了仑乌。這里我們將這個cookie的過期時間設(shè)置為3分鐘:
Cookie cookie = new Cookie("VisitCount", "" + count);
cookie.setMaxAge(3 * 60);
response.addCookie(cookie);
這樣一來,3分鐘之內(nèi)琴锭,無論我們是否關(guān)閉瀏覽器晰甚,cookie都不會過期。