来源:http://www.study-code.com/java/j2se/66422.htm

头一段时间,为了在 Java 中实现 Cookie 的功能,看了若干规范文档,写了大量的代码,才勉强将其搞定。今天看到文章才知道 Java SE 6 中为了实现 Cookie 功能,提供了若干现成的类,以后谁要是再想写 Cookie 可就有福了啊。

注:下面的内容摘自developerworks的“Java SE 6 新特性: HTTP 增强”部分内容。具体地址:http://www.ibm.com/developerworks/cn/java/j-lo-jse62/index.html

Cookie 是 Web 应用当中非常常用的一种技术,用于储存某些特定的用户信息。虽然,我们不能把一些特别敏感的信息存放在 Cookie 里面,但是,Cookie 依然可以帮助我们储存一些琐碎的信息,帮助 Web 用户在访问网页时获得更好的体验,例如个人的搜索参数,颜色偏好以及上次的访问时间等等。网络程序开发者可以利用 Cookie 来创建有状态的网络会话(Stateful Session)。 Cookie 的应用越来越普遍。在 Windows 里面,我们可以在“Documents And Settings”文件夹里面找到IE使用的 Cookie,假设用户名为 admin,那么在 admin 文件夹的 Cookies 文件夹里面,我们可以看到名为“admin@(domain)”的一些文件,其中的 domain 就是表示创建这些 Cookie 文件的网络域, 文件里面就储存着用户的一些信息。

JavaScript 等脚本语言对 Cookie 有着很不错的支持。 .NET 里面也有相关的类来支持开发者对 Cookie 的管理。 不过,在 Java SE 6 之前, Java一直都没有提供 Cookie 管理的功能。在 Java SE 5 里面, java.net 包里面有一个 CookieHandler 抽象类,不过并没有提供其他具体的实现。到了 Java SE 6, Cookie 相关的管理类在 Java 类库里面才得到了实现。有了这些 Cookie 相关支持的类,Java 开发者可以在服务器端编程中很好的操作 Cookie, 更好的支持 HTTP 相关应用,创建有状态的 HTTP 会话。

用 HttpCookie 代表 Cookie
java.net.HttpCookie 类是 Java SE 6 新增的一个表示 HTTP Cookie 的新类, 其对象可以表示 Cookie 的内容, 可以支持所有三种 Cookie 规范:

Netscape 草案
RFC 2109 - http://www.ietf.org/rfc/rfc2109.txt
RFC 2965 - http://www.ietf.org/rfc/rfc2965.txt
这个类储存了 Cookie 的名称,路径,值,协议版本号,是否过期,网络域,最大生命期等等信息。

用 CookiePolicy 规定 Cookie 接受策略
java.net.CookiePolicy 接口可以规定 Cookie 的接受策略。 其中唯一的方法用来判断某一特定的 Cookie 是否能被某一特定的地址所接受。 这个类内置了 3 个实现的子类。一个类接受所有的 Cookie,另一个则拒绝所有,还有一个类则接受所有来自原地址的 Cookie。

用CookieStore 储存 Cookie
java.net.CookieStore 接口负责储存和取出 Cookie。 当有 HTTP 请求的时候,它便储存那些被接受的 Cookie; 当有 HTTP 回应的时候,它便取出相应的 Cookie。 另外,当一个 Cookie 过期的时候,它还负责自动删去这个 Cookie。

用 CookieManger/CookieHandler 管理 Cookie
java.net.CookieManager 是整个 Cookie 管理机制的核心,它是 CookieHandler 的默认实现子类。

一个 CookieManager 里面有一个 CookieStore 和一个 CookiePolicy,分别负责储存 Cookie 和规定策略。用户可以指定两者,也可以使用系统默认的 CookieManger。

例子
下面这个简单的例子说明了 Cookie 相关的管理功能:

// 创建一个默认的 CookieManager
CookieManager manager = new CookieManager();

// 将规则改掉,接受所有的 Cookie
manager.setCookiePolicy(CookiePolicy.ACCEPT_ALL);

// 保存这个定制的 CookieManager
CookieHandler.setDefault(manager);
       
// 接受 HTTP 请求的时候,得到和保存新的 Cookie
HttpCookie cookie = new HttpCookie("...(name)...","...(value)...");
manager.getCookieStore().add(uri, cookie);
       
// 使用 Cookie 的时候:
// 取出 CookieStore       
CookieStore store = manager.getCookieStore();

// 得到所有的 URI       
List<URI> uris = store.getURIs();
for (URI uri : uris) {
 // 筛选需要的 URI
 // 得到属于这个 URI 的所有 Cookie
 List<HttpCookie> cookies = store.get(uri);
 for (HttpCookie cookie : cookies) {
  // 取出了 Cookie
 }
}
       
// 或者,取出这个 CookieStore 里面的全部 Cookie
// 过期的 Cookie 将会被自动删除
List<HttpCookie> cookies = store.getCookies();
for (HttpCookie cookie : cookies) {
 // 取出了 Cookie
}

转载于:https://www.cnblogs.com/kangshifu/archive/2008/11/05/1327494.html

Java SE 6 中实现 Cookie 功能相关推荐

  1. java中的jpa_JPA教程–在Java SE环境中设置JPA

    java中的jpa JPA代表Java Persistence API,它基本上是一个规范,描述了一种将数据持久存储到持久存储(通常是数据库)中的方法. 我们可以将其视为类似于Hibernate之类的 ...

  2. JPA教程–在Java SE环境中设置JPA

    JPA代表Java Persistence API,它基本上是一个规范,描述了一种将数据持久存储到持久存储(通常是数据库)中的方法. 我们可以将其视为类似于Hibernate的 ORM工具的东西,除了 ...

  3. Java SE Eclipse中引入第三方jar及class

    使用eclipse开发Java SE 总免不了需要引入第三方的jar或者calss文件.这里给大家说一下如何在eclipse中引入第三方jar或者calss文件. 让我们先了解一下eclipse项目中 ...

  4. Java Math 类中的新功能--浮点数

    Java™语言规范第 5 版向 java.lang.Math和 java.lang.StrictMath添加了 10 种新方法,Java 6 又添加了 10 种.这个共两部分的系列文章的 第 1 部分 ...

  5. 用java实现web中闹钟小功能_Java多线程小练习,闹钟

    package com.konghao.test; //闹钟类 public class Alarm implements Runnable { private boolean isWork; //闹 ...

  6. Java SE 8新特性导览:使用Lambda Expression进行函数式编程

    " Java SE 8新功能浏览 "系列的这篇文章将深入了解Lambda表达式 . 我将向您展示Lambda表达式的几种不同用法. 它们都具有功能接口的共同实现. 我将解释编译器如 ...

  7. Java SE 6之GUI:让界面更加绚丽(下)

    在上一篇中我介绍了Java SE 6在GUI上的部分改进.在这篇文章中我接着介绍另外几种新的GUI功能.这些功能是: 1.  带有排序和过滤功能的JTable. 2.  增强的JTabbedPane组 ...

  8. java se面试题_Java SE 8面试问答(第1部分)

    java se面试题 In this post, we are going to discuss some important Java SE 8 Interview Questions with A ...

  9. java se 导原码_Java SE 8新功能导览:Java开发世界中的重大变化

    java se 导原码 我很自豪,像其他专业团队成员一样,是采用OpenJDK的成员之一,但是从过去8个月就加入了,我们经历了Java SE 8 开发,编译,编码,讨论等各个阶段,直到将其付诸实践为止 ...

最新文章

  1. ctrl+Enter 自动加上 .com 而不是 .com.cn
  2. oracle有text字段吗,Oracle Text简介
  3. 在参加比赛之后一定要注意的事情
  4. js实现oss批量下载文件_js下载文件到本地各种方法总结
  5. c 调用上层类中函数_Matlab系列之函数嵌套
  6. Linux——网络地址临时配置(详细步骤+问题解决)
  7. Java多线程:线程休眠
  8. MyEclipse6.5注册码(转)
  9. Bailian1183 POJ1183 反正切函数的应用【迭代计算】
  10. Webpack 2 视频教程 020 - Webpack 2 中的 HMR ( Hot Module Replacement )
  11. 【汇总目录】嵌入式系统技术
  12. Java NIO框架Netty教程(二)
  13. 国内几款通用论坛程序简介和比较
  14. 一个完整的HTTP请求过程详细
  15. Redundant Paths(边双连通分量缩点+思维构造)
  16. C++关键字protected的作用详解
  17. C语言中文字符索引,C语言关键字中英文对照索引
  18. 勃林格殷格翰未来五年计划增资中国4.51亿欧元;第127届广交会闭幕 | 美通企业日报...
  19. SpringCloud微服务面试题
  20. python 傅里叶变换_【python学习笔记】21:numpy傅里叶变换

热门文章

  1. linux 修改ramdisk内容,在Linux下使用RamDisk
  2. 0 1背包问题 java_0-1背包问题,java的动态规划如题,代码如下public
  3. mysql group by_MySQL优化GROUP BY方案
  4. 关于机器人方面的sci论文_如何给论文润色?从这两个方面入手
  5. MySQL通过命令修改密码
  6. iOS开发之runtime(16):设置/获取section数据详解
  7. postgresql基本使用(一)
  8. 写一个在一个字符串(n)中寻找一个子串(m)第一个位置的函数。
  9. Java线程那点事儿
  10. 使用windows crypto API加密解密