Servlet程序应用和实例之使用Cookie呢,我们首先来看看Cookie,Cookie是一小块可以嵌入HTTP请求和响应的数据。它在服务器上产生,并作为响应头域的一部分返回给客户。浏览器在收到有Cookie的响应后,会把Cookie的内容以"关键字/值"的形式写入到一个专为存放Cookie的文本文件中。浏览器会把Cookie的信息与请求发送给服务器,这样服务器就可以再次读取Cookie中存放的数据了。Cookie可以对有效期进行设置,浏览器不会把过期的Cookie发送给服务器。
Servlet API提供了一个Cookie类,封装了对Cookie的基本操作。如下所示。
java.lang.Object.javax.servlet.http.Cookie
public class Cookie extends Object implements Cloneable
Cookie类的方法如表1所示。
- 表 1 Cookie类的方法
- 方 法 意 义
- Cookie(String, String) 生成一个有名和值的Cookie
- clone() 返回当前对象的一个拷贝
- getComment() 返回描述该Cookie的注释,没有就为空
- getDomain() 返回该Cookie的域名
- getMaxAge() 返回该Cookie的最大寿命
- getName() 返回该Cookie的名字
- getPath() 返回使用该Cookie的所有URL前缀
- getSecure() 返回该Cookie的安全标志
- getValue() 返回该Cookie的值
- getVersion() 返回该Cookie的版本
- setComment(String) 设置描述该Cookie的注释
- setDomain(String) 设置该Cookie的域名
- setMaxAge(int) 设置该Cookie的最大寿命
- setPath(String) 设置该Cookie只能被从使用该URL前缀的请求提出
- setSecure(boolean) 设置该Cookie的安全标志
- setValue(String) 设置该Cookie的值
- setVersion(int) 设置该Cookie所使用的协议的版本号
实例:使用Cookie的Servlet程序
下面的程序示例14-6就是对Cookie的基本运用。
【程序源代码】
- // ==================== Program Description ======================
- // 程序名称:示例14-6: CookieCounter.java
- // 程序目的:编写Cookie的Servlet程序
- // ==========================================================
- package test.cookie;
- import java.io.*;
- import java.util.*;
- import javax.servlet.*;
- import javax.servlet.http.*;
- public class CookieCounter extends HttpServlet {
- public void init(ServletConfig config) throws ServletException {
- super.init(config);
- }
- public void service(HttpServletRequest request,
- HttpServletResponse response) throws
- IOException {
- boolean cookieFound = false;
- Cookie thisCookie = null;
- response.setContentType("text/html;charset=gb2312;");
- PrintWriter out = response.getWriter();
- Cookie[] cookies = request.getCookies();
- if (cookies != null){
- for (int i = 0; i ﹤ cookies.length; i++) {
- thisCookie = cookies[0];
- if (thisCookie.getName().equals("CookieCount")) {
- cookieFound = true;
- break;
- }
- }
- }
- if (cookieFound == false) {
- thisCookie = new Cookie("CookieCount", "1");
- thisCookie.setMaxAge(10);
- response.addCookie(thisCookie);
- }
- out.println("﹤html﹥﹤head﹥ " +
- "﹤title﹥阅微草堂﹤/title﹥ " +
- "﹤/head﹥ " +
- "﹤body﹥﹤p﹥﹤font color=red﹥" +
- "﹤center﹥﹤h3﹥阅微草堂﹤/h3﹥﹤/center﹥﹤/font﹥");
- out.println("﹤p﹥欢迎来到阅微草堂!﹤/p﹥");
- if (cookieFound) {
- int cookieCount = Integer.parseInt(thisCookie.getValue());
- cookieCount++;
- thisCookie.setValue(String.valueOf(cookieCount));
- thisCookie.setMaxAge(10);
- response.addCookie(thisCookie);
- out.println("﹤p﹥这是您在近" + 10 *
- (Integer.parseInt((thisCookie.getValue()))-1)
- + "秒钟内第 " + thisCookie.getValue() + " 次光临寒舍!﹤/p﹥");
- }
- else {
- out.println( "﹤p﹥您至少已经10秒钟没有光临寒舍了!﹤/p﹥");
- }
- out.println("﹤/body﹥﹤/html﹥");
- }
- }
相应的配置文件web.xml的内容如下:
- ﹤?xml version="1.0" encoding="UTF-8"?﹥
- ﹤!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//
- DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"﹥
- ﹤web-app﹥
- ﹤servlet﹥
- ﹤servlet-name﹥CookieCounter﹤/servlet-name﹥
- ﹤servlet-class﹥test.cookie.CookieCounter﹤/servlet-class﹥
- ﹤/servlet﹥
- ﹤servlet-mapping﹥
- ﹤servlet-name﹥CookieCounter﹤/servlet-name﹥
- ﹤url-pattern﹥/CookieCounter﹤/url-pattern﹥
- ﹤/servlet-mapping﹥
- ﹤/web-app﹥