JSPCN主页 | JSP空间 | 网站制作 | JSP下载 | JSP论坛 | JSP教程 | 关于JSPCN | 联系我们
JSP虚拟主机,jsp空间,java空间,java虚拟空间,详细请点击进入
做最专业的JSP中文网站 当前位置首页--JAVA技术--J2EE  
文章搜索:
关键字 标题
  
JSP中文网内容管理系统(JCMS)
JSP虚拟主机
网络笔记本
网摘,图片,笔记收藏
虚拟服务器

JSPCN文章目录分类
JSP配置[219]JSP基础[136]
中文问题[69]上传问题[27]
JAVABEAN[46]数据库[212]
文件操作[126]图片声音[17]
JSP其他[57]时间相关[16]
JAVAMAIL[72]STRUTS[144]
开发工具[28]教程系列[157]
JSP实例[89]
JAVA基础[421]APPLET[78]
JAVA网络[179]Applica[115]
Servlet[98]XML[163]
J2ME[257]J2EE[374]
考试相关[63]JAVA线程[90]
EJB[261]Swing[26]
Java API[141]声音图片[28]
异常处理[33]JAVA实例[290]
JAVA类[139]SUN[89]
Hibernate[6]JMX[8]
Spring[34]
本版推荐文章 
本版热点文章 
相关文章链接 
 
使用Cookie的Servlet程序应用和实例
作者:不详     文章来源:www.jspcn.net
访问次数:425次     加入时间:2005年08月30日

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类的方法如表14-4所示。

表14-4  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的基本运用。
    【程序源代码】

1 // ==================== Program Description ======================
2 // 程序名称:示例14-6: CookieCounter.java
3 // 程序目的:编写Cookie的Servlet程序
4 // ==========================================================
5 package test.cookie;

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(" " +
42                   "阅微草堂 " +
43                   " " +
44                   "

" +
45                   "

阅微草堂

");
46       out.println("

欢迎来到阅微草堂!

");
47 
48       if (cookieFound) {
49          int cookieCount = Integer.parseInt(thisCookie.getValue());
50          cookieCount++;
51          thisCookie.setValue(String.valueOf(cookieCount));
52          thisCookie.setMaxAge(10);
53          response.addCookie(thisCookie);
54 
55          out.println("

这是您在近" + 10 *
(Integer.parseInt((thisCookie.getValue()))-1)
56                    + "秒钟内第 " + thisCookie.getValue() + " 次光临寒舍!

");
57       }
58       else {
59          out.println( "

您至少已经10秒钟没有光临寒舍了!

");
60       }
61       out.println("");
62    }
63 }
    相应的配置文件web.xml的内容如下:


DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

 
    CookieCounter
    test.cookie.CookieCounter
 

 
    CookieCounter
    /CookieCounter
 


    【程序输出结果】如图14-8所示。


(a)

(b)
图14-8 客户端返回有关Cookie的信息


    【程序注解】
    本例是在Resin 2.1.8服务器下调试运行的。首先在webapps目录下建一个名为cookie的Web应用。Servlet编译生成的class文件放在cookie/WEB-INF/classes/test/cookie目录下,web.xml文件直接放在cookie/WEB-INF目录下。由于web.xml中url-pattern的配置为"/CookieCounter",所以在浏览器中输入"http://localhost:8080/cookie/CookieCounter"即可访问到该Servlet。

    下面对源程序做一简单分析。在service()方法中,用getCookies()函数获得客户端的Cookies,查找是否有名为"CookieCount"的Cookie。如果不存在就生成一个Cookie,名称为"CookieCount",值为"1"(thisCookie = new Cookie("CookieCount", "1")),并指定了该Cookie的最大寿命为10秒钟(setMaxAge(10)),然后将该Cookie发送给客户端(addCookie())。如果Cookie已经存在,就将Cookie的值加1之后再发送给客户端。

    这样,如果客户端第一次访问CookieCounter Servlet,或者两次访问之间的时间间隔超过了10秒,就将看到如图14-8(a)所示的输出结果。如果客户端在Cookie的生命周期结束之前连续访问该Servlet,则Cookie的值将不断增加。如图14-8(b)所示的就是在10秒钟内连续访问两次Servlet时的输出结果。

JSP虚拟主机 | JSP空间 | JSP主机 | JSP双线虚拟主机 | JAVA空间 | JAVA虚拟主机 | 虚拟服务器 | JSP 虚拟服务器 | VPS
Virtual Private Server | JAVA虚拟服务器 | VM服务器 | VHOST | 虚拟操作系统 | JSP论坛 | JAVA论坛 | JSP站点论坛
Copyright © 2002-2005 JSPCN.net. All rights reserved.
JSP中文网    备案序号:蜀ICP备05001583号
成都恒海科技发展有限公司    成都市一环路南二段6号新瑞楼三楼8号