一个 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
}
其他新特性
NetworkInterface 的增强
从 Java SE 1.4 开始,JDK 当中出现了一个网络工具类 java.net.NetworkInterface,提供了一些网络的实用功能。 在 Java SE 6 当中,这个工具类得到了很大的加强,新增了很多实用的方法。例如:
public boolean isUp()
用来判断网络接口是否启动并运行
public boolean isLoopback()
用来判断网络接口是否是环回接口(loopback)
public boolean isPointToPoint()
用来判断网络接口是否是点对点(P2P)网络
public boolean supportsMulticast()
用来判断网络接口是否支持多播
public byte[] getHardwareAddress()
用来得到硬件地址(MAC)
public int getMTU()
用来得到最大传输单位(MTU,Maximum Transmission Unit)
public boolean isVirtual()
用来判断网络接口是否是虚拟接口
关于此工具类的具体信息,请参考 Java SE 6 相应文档(见 参考资源)。
域名的国际化
在最近的一些 RFC 文档当中,规定 DNS 服务器可以解析除开 ASCII 以外的编码字符。有一个算法可以在这种情况下做 Unicode 与 ASCII 码之间的转换,实现域名的国际化。java.net.IDN 就是实现这个国际化域名转换的新类,IDN 是“国际化域名”的缩写(internationalized domain names)。这个类很简单,主要包括 4 个静态函数,做字符的转换。
结语
Java SE 6 有着很多 HTTP 相关的新特性,使得 Java SE 平台本身对网络编程,尤其是基于 HTTP 协议的因特网编程,有了更加强大的支持。