头一段时间,为了在 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
}
分享到:
相关推荐
Java SE 6 在 HTTP 相关的特性上有了显著的提升,不仅增强了网络认证的便利性,还提供了轻量级 HTTP 服务器和更完善的 HTTP Cookie 管理,以及对网络接口和 DNS 国际化的支持,大大提升了 Java 在 Web 开发中的实用...
Java Swing是Java标准版(Java SE)中的一个图形用户界面工具包,用于创建桌面应用程序。在这个简易浏览器的实现中,Swing被用来构建浏览器的基本结构,如菜单、按钮、文本框等元素,同时也可能负责处理用户交互。 ...
7. **用户认证与授权**:系统应包含用户注册、登录功能,可能使用Session和Cookie来管理用户状态,同时通过权限控制,确保只有合法用户才能访问特定功能。 8. **商品管理**:系统的核心功能之一,涉及商品的添加、...
- **核心Java**: 系统的基础是Java SE(Java Standard Edition),包括面向对象编程、异常处理、集合框架、多线程、输入/输出流等基础概念。 - **Servlet与JSP**: 作为Web应用开发的重要组成部分,Servlet负责处理...
1. **Java Web开发基础**:项目基于Java语言,这涉及到Java SE(标准版)和Java EE(企业版)的基础知识。开发者可能使用了Servlet和JSP(JavaServer Pages)来处理HTTP请求和生成动态网页内容。 2. **MVC设计模式*...
1. **Java技术栈**:Java图书查询系统主要依赖Java编程语言,这涉及到Java SE(标准版)的基础知识,如面向对象编程、异常处理、IO流、集合框架等。同时,为了构建网络应用,还需要掌握Java EE(企业版)的相关技术...
Java集合框架(Collection API)是Java SE中的一个核心部分,它提供了对对象集合的高效管理。集合框架包括List、Set、Map及其各种实现,例如ArrayList、LinkedList、Vector、HashSet、TreeSet、HashMap和TreeMap等。...
Java中的Cookie功能通过`javax.servlet.http.Cookie`类来实现。服务器可以通过`response.addCookie(Cookie cookie)`方法设置Cookie,而`request.getCookie()`方法可以获取客户端发送的Cookie。每个Cookie对象包含...
开发者可以在JSP页面中嵌入Java代码,实现视图层的动态渲染。例如,展示用户的订单详情或者推荐菜品。 3. JSTL/EL:JavaServer Pages Standard Tag Library(JSTL)和Expression Language(EL)简化了JSP中的业务...
另外,javase-2.1.jar可能是ZXing针对Java SE环境的特定实现或扩展,包含了一些特定平台的辅助功能。使用这些库,开发者可以轻松地在Java应用程序中生成二维码图片,或者读取和解析二维码中的数据。 在实际开发中,...
在Java Web开发中,Servlet是服务器端用于处理HTTP请求的核心组件。Servlet不仅能够生成动态内容,还能进行会话管理,其中最常用的就是Cookie和Session。本文将深入探讨Servlet如何管理和利用这两种技术进行会话跟踪...
1. **Java核心技术**:本系统基于Java SE和Java EE进行开发,Java SE提供了基础的类库支持,而Java EE则提供了企业级应用所需的服务器端组件,如Servlet、JSP、EJB等。 2. **MVC设计模式**:模型-视图-控制器...
2. 集合(必会):Java集合框架是面试中的重头戏,包括List(如ArrayList、LinkedList)、Set(如HashSet、TreeSet)和Map(如HashMap、TreeMap、LinkedHashMap)的实现与使用,以及泛型、迭代器、Comparable和...
Java SE(标准版)提供了基础的面向对象编程环境,而Java EE(企业版)则提供了用于构建分布式应用的框架和服务,如Servlet、JSP和EJB等。在这个系统中,可能使用了Servlet进行后端处理,JSP生成动态网页,以及JDBC...
1. **Java技术栈**: 该项目基于Java编程语言,可能使用了Java SE(标准版)作为后端开发基础,Java EE(企业版)用于构建Web应用,可能采用了Servlet、JSP、JDBC等技术。此外,考虑到是新闻发布系统,可能会用到...
首先,我们需要理解Java SE(标准版)的基础,包括类、对象、接口和异常处理。然后,学习Servlet和JSP(JavaServer Pages)是Java Web开发的核心,它们用于处理HTTP请求和响应。 2. **Servlet技术**:Servlet是Java...
6. **论坛功能实现**:包括发帖、回帖、编辑、删除等功能,这涉及到对数据库的CRUD操作,以及前后端交互的实现,可能使用AJAX进行异步更新。 7. **模板引擎**:JSP或Thymeleaf等模板引擎可能用于生成动态HTML页面,...
在Java Web开发中,`Servlet`是一种用于扩展服务器功能的Java类,它是Java标准版(Java SE)的一部分,但在Java企业版(Java EE)中被广泛使用。在这个博客系统中,Servlet扮演了处理HTTP请求和响应的关键角色。...
【Java物业管理系统设计与实现】是一个综合性的项目,它涵盖了软件工程中的多个关键知识点,包括需求分析、系统设计、编程实现、测试与维护等。在Java平台上构建这样的系统,主要利用了Java的强大功能和跨平台特性,...
1. **Java技术栈**:此系统的核心是Java编程语言,可能采用了Java SE(标准版)和Java EE(企业版)技术。Java EE提供了用于构建分布式应用程序的框架和API,如Servlet、JSP、EJB等。 2. **数据库管理**:系统会...