全文总结:

在读取Cookie,然后操作时,除了getName(),getValue()外,不要妄图得到其他信息,如下方法不会得到值的:

cookie.getMaxAge();

cookie.getDomain();
。。。

因为,客户端传来的时候,就只剩下key和value了。

Java中的Cookie操作:

在Java中利用Serlvet或者JSP scriptlet可以向浏览器端写入Cookie。

同样,利用Servet或者JSP scriptlet 也可以读取到 Cookie信息。

Servlet规范中的Cookie API 如下:

setMaxAge  setPath setDomain等方法,可以对Cookie状态进行控制;

同样存在如下方法,可以获得相应的状态:

getMaxAge  getPath  getDomain等方法,可以对Cookie的状态。

然后,问题来了:

读取Cookie时,发现除了Cookie的key和value外,其他的信息都丢失了!!

原因很简单:

Cookie从服务器端发送到客户端时,信息是完整的;

Cookie从客户器端发送到服务端时,信息只剩下key、value了。

(想想也明白,Domain不对的Cookie、Path不对的Cookie、过期的Cookie,客户端是不会发送过来的。)

那为什么Java中提供了相应的get方法呢? 那个方法是在生成Cookie后,尚未发送到客户端时,使用的。是“封装”的体现吧  O(∩_∩)O~

案例说话:

写入Cookie的Servlet

  1. package edu.xjtu.servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.Cookie;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. public class AddCookie extends HttpServlet {
  10. public void doGet(HttpServletRequest request, HttpServletResponse response)
  11. throws ServletException, IOException {
  12. Cookie cookie01 = new Cookie("site","JavaEye");
  13. *60*1);
  14. cookie01.setPath("/");
  15. Cookie cookie02 = new Cookie("name","xiaolongfeixiang");
  16. *60*2);
  17. cookie02.setPath("/servlet");
  18. response.addCookie(cookie01);
  19. response.addCookie(cookie02);
  20. response.setContentType("text/html;charset=UTF8");
  21. PrintWriter out = response.getWriter();
  22. out.println("<HTML>");
  23. out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
  24. out.println("  <BODY>");
  25. out.println("  cookie写入了");
  26. out.println(" <a href='show'> 查看cookie </a>");
  27. out.println("  </BODY>");
  28. out.println("</HTML>");
  29. out.flush();
  30. out.close();
  31. }
  32. }

读取Cookie的Servlet

  1. package edu.xjtu.servlet;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.Cookie;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. public class ShowCookie extends HttpServlet {
  10. public void doGet(HttpServletRequest request, HttpServletResponse response)
  11. throws ServletException, IOException {
  12. Cookie[] cookies = request.getCookies();
  13. StringBuffer buffer = new StringBuffer();
  14. for(Cookie cookie : cookies){
  15. buffer.append(cookie.getName()).append(" : ").append(cookie.getValue());
  16. buffer.append(" -- ").append(" MaxAge : "+cookie.getMaxAge());
  17. buffer.append(" -- ").append(" Path : "+cookie.getPath()).append("<br/>");
  18. }
  19. response.setContentType("text/html;charset=UTF8");
  20. PrintWriter out = response.getWriter();
  21. out.println("<HTML>");
  22. out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
  23. out.println("  <BODY>");
  24. out.println("  读取的Cookie:<br>");
  25. out.println(buffer.toString());
  26. out.println("  </BODY>");
  27. out.println("</HTML>");
  28. out.flush();
  29. out.close();
  30. }
  31. }

写入Cookie的页面 :

Response的信息如下:(信息齐全!!)

查看Cookie的页面:(发现结果丢了一部分:)

看浏览器的Cookie 

Cookie: name 属性都对着的

Cookie: site 属性也都对着的

再看看网络:(发现传过来的Cookie都只有key-value了。所以那些状态信息都丢失了!!)

验证了前面的总结:


在读取Cookie然后操作时,除了getName(),getValue()外,不要妄图得到其他信息,如下方法不会得到值的:

cookie.getMaxAge();

cookie.getDomain();
。。。

因为,客户端传来的时候,就只剩下key和value了。

最新文章

  1. IOS开发——01_第一个OC程序
  2. ioinc
  3. javascript中的 &quot;==&quot;
  4. iOS开发学习记录【整理】
  5. mysql数据库学习(一)--基础
  6. 【七】注入框架RoboGuice使用:(Your First Custom Binding)
  7. UIAlertController 自定义输入框及KVO监听
  8. Java - 初始化
  9. 远程块存储iSCSI
  10. nodejs 全局变量
  11. java+selenium实现web自动化
  12. go中for循环使用多个变量避坑
  13. hdu1695
  14. redis(三)积累-基本的取值和设值
  15. VMware ESXI6.0服务器安装
  16. ie11中报SCRIPT1003: 缺少 &#39;:&#39;的错误?
  17. Mono For Android 之 配置环境
  18. (转)解决dubbox-demo-provider.xml报错的问题:提示Failed to read schema document
  19. C#高级编程9-第7章 运算符和类型强制转换
  20. 管理与技术未必不可兼得,一个20年IT老兵的码农生涯

热门文章

  1. ZooKeeper的伪分布式集群搭建
  2. C指针分析详解
  3. 第一周 Introduction
  4. LeetCode 82 ——删除排序链表中的重复元素 II
  5. ipfs02笔记
  6. BZOJ 3569 DZY Loves Chinese II 树上差分+线性基
  7. pta数组作业
  8. python3 urllib和requests模块
  9. 【bzoj2287】[POJ Challenge]消失之物 背包dp
  10. Python 类和对象-上