十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
Servlet程序应用和实例之使用Cookie呢,我们首先来看看Cookie,Cookie是一小块可以嵌入HTTP请求和响应的数据。它在服务器上产生,并作为响应头域的一部分返回给客户。浏览器在收到有Cookie的响应后,会把Cookie的内容以"关键字/值"的形式写入到一个专为存放Cookie的文本文件中。浏览器会把Cookie的信息与请求发送给服务器,这样服务器就可以再次读取Cookie中存放的数据了。Cookie可以对有效期进行设置,浏览器不会把过期的Cookie发送给服务器。

黟县网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。创新互联自2013年起到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。
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﹥\n" +
 - "﹤title﹥阅微草堂﹤/title﹥\n" +
 - "﹤/head﹥\n" +
 - "﹤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﹥
 
【程序注解】
本例是在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时的输出结果。
Servlet程序应用和实例之使用Cookie的基本情况就是这样了,希望对你在实际操作有所帮助。