Java 日看一类(66)之IO包中的CookieHandler

本文介绍Java中的CookieHandler类,该类用于HTTP状态管理,通过回调机制将策略绑定到HTTP协议处理程序。文章详细解释了系统级CookieHandler的注册与获取方法,以及如何通过CookieHandler进行Cookie的读取和写入。

该类无继承类

引入了如下包

import java.util.Map;
import java.util.List;
import java.io.IOException;
import sun.security.util.SecurityConstants;



该类的类头注释如下:

/**
 * A CookieHandler object provides a callback mechanism to hook up a
 * HTTP state management policy implementation into the HTTP protocol
 * handler. The HTTP state management mechanism specifies a way to
 * create a stateful session with HTTP requests and responses.
 *
 * <p>A system-wide CookieHandler that to used by the HTTP protocol
 * handler can be registered by doing a
 * CookieHandler.setDefault(CookieHandler). The currently registered
 * CookieHandler can be retrieved by calling
 * CookieHandler.getDefault().
 *
 * For more information on HTTP state management, see <a
 * href="http://www.ietf.org/rfc/rfc2965.txt"><i>RFC&nbsp;2965: HTTP
 * State Management Mechanism</i></a>
 *
 * @author Yingxian Wang
 * @since 1.5
 */

大意如下:

CookieHandler对象会提供一个回调途径来绑定http状态管理策略到http协议处理程序上

http状态管理通过http请求和响应来指定创建含状态的回话方法

被http协议使用的系统级CookieHandler可以通过CookieHandler.setDefault(CookieHandler)方法注册

当前被注册的CookieHandler可以通过CookieHandler.getDefault方法返回

对于更多的http状态管理信息,请去看RFC2965


该类含有如下的成员变量:

系统级的CookieHandler(可以申请请求头部,并且管理响应的cookie)

private static CookieHandler cookieHandler;


该类含有如下的成员方法:

获得系统级CookieHandler

public synchronized static CookieHandler getDefault() {
    SecurityManager sm = System.getSecurityManager();//安全性检查
    if (sm != null) {
        sm.checkPermission(SecurityConstants.GET_COOKIEHANDLER_PERMISSION);
    }
    return cookieHandler;//获得当前状态管理器
}

注册成为系统级CookieHandler(null的话可以清空,也就是取消注册

public synchronized static void setDefault(CookieHandler cHandler) {
    SecurityManager sm = System.getSecurityManager();//安全性检查
    if (sm != null) {
        sm.checkPermission(SecurityConstants.SET_COOKIEHANDLER_PERMISSION);
    }
    cookieHandler = cHandler;//绑定到当前的状态管理器上
}

从请求头中指定 uri 的 cookie 缓存中获取所有可用的 cookie。 HTTP 协议实现程序应该确保在添加所有与选择 cookie 相关的请求头之后且在发送请求之前调用此方法。

public abstract Map<String, List<String>>
    get(URI uri, Map<String, List<String>> requestHeaders)
    throws IOException;

向响应头中出现的所有可用cookie加入到cookie缓存中

public abstract void
    put(URI uri, Map<String, List<String>> responseHeaders)
    throws IOException;



这里所谓系统级就是作为静态对象的存在,只能存在一个,每次外部的操作也仅能对该静态对象进行操作。虽然没有看到和该类的对应结合类,但大胆的推测下应该大部分都是对这个静态对象进行操作,同时向系统底层提供的操作接口也应该是这个静态对象。

由于http本质上是一种无状态链接,对于需要状态响应的部分功能就需要使用cookie(以及session)来完成,这里的cookie就是链接状态的信息载体(一般存在于客户端),在请求时会把自己本身的状态信息发送到服务器端,接收响应时也会接受服务器端新设置的cookie(服务器标志该客户的状态)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值