java.lang.Object java.net.CookieHandler java.net.CookieManager
public class CookieManager
CookieManager 提供 CookieHandler
的具体实现,它将 cookie 的存储区与围绕接受和拒绝 cookie 的策略分离开来。使用管理存储的 CookieStore
以及做出 cookie 接受/拒绝决策的 CookiePolicy
对象来初始化 CookieManager。
java.net 包中的 HTTP cookie 管理如下所示:
use CookieHandler <------- HttpURLConnection ^ | impl | use CookieManager -------> CookiePolicy | use |--------> HttpCookie | ^ | | use | use | |--------> CookieStore ^ | impl | Internal in-memory implementation
- CookieHandler 是 cookie 管理的核心所在。用户可以调用 CookieHandler.setDefault 设置要使用的具体 CookieHanlder 实现。
- CookieManager.put 调用 CookiePolicy.shouldAccept 以查看 cookie 是否应该被接受并放入 cookie 存储区。用户可以使用三种预定义 CookiePolicy(即 ACCEPT_ALL、ACCEPT_NONE 和 ACCEPT_ORIGINAL_SERVER)中的任何一种,或者定义自己的 CookiePolicy 实现并告知 CookieManager 使用该策略。
- CookieStore 是存储任何已接受 HTTP cookie 的地方。如果创建时未指定,那么 CookieManager 实例将使用内部内存实现。用户也可以实现一个 CookieStore 并告知 CookieManager 使用该存储区。
- 当前,CookieManager 只能使用 CookieStore.add(URI, HttpCookie) 和 CookieStore.get(URI)。其他方法是出于完整性考虑,也可能是更复杂 CookieStore 实现(例如 NetscapeCookieSotre)的需要。
用户可以用各种方式“钩住”自己的 HTTP cookie 管理行为,例如:
- 使用 CookieHandler.setDefault 设置全新的
CookieHandler
实现- 让 CookieManager 成为默认
CookieHandler
实现,但实现用户自己的CookieStore
和CookiePolicy
, 并告知默认 CookieManager 使用它们:// this should be done at the beginning of an HTTP session CookieHandler.setDefault(new CookieManager(new MyCookieStore(), new MyCookiePolicy()));- 让 CookieManager 成为默认
CookieHandler
实现,但使用自定义CookiePolicy
:// this should be done at the beginning of an HTTP session CookieHandler.setDefault(new CookieManager()); // this can be done at any point of an HTTP session ((CookieManager)CookieHandler.getDefault()).setCookiePolicy(new MyCookiePolicy());
该实现遵守 RFC 2965 的第 3.3 节。
构造方法摘要 | |
---|---|
CookieManager() 创建一个新 cookie 管理器。 |
|
CookieManager(CookieStore store, CookiePolicy cookiePolicy) 使用指定 cookie 存储区和 cookie 策略创建一个新 cookie 管理器。 |
方法摘要 | |
---|---|
Map<String,List<String>> |
get(URI uri, Map<String,List<String>> requestHeaders) 从请求头中指定 uri 的 cookie 缓存中获取所有可用的 cookie。 |
CookieStore |
getCookieStore() 获取当前 cookie 存储区。 |
void |
put(URI uri, Map<String,List<String>> responseHeaders) 将响应头中出现的所有可用 cookie(例如名为 Set-Cookie2 的响应头字段)设置到 cookie 缓存中。 |
void |
setCookiePolicy(CookiePolicy cookiePolicy) 设置此 cookie 管理器的 cookie 策略。 |
从类 java.net.CookieHandler 继承的方法 |
---|
getDefault, setDefault |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
public CookieManager()
此构造方法将使用默认 cookie 存储区和接受策略创建新的 cookie 管理器。效果与 CookieManager(null, null) 相同。
public CookieManager(CookieStore store, CookiePolicy cookiePolicy)
store
- cookie 管理器要使用的
CookieStore。如果为
null,则 cookie 管理器将使用默认存储区,即一个内存 CookieStore 实现。
cookiePolicy
- cookie 管理器用作策略回调的
CookiePolicy 实例。如果为
null,则使用 ACCEPT_ORIGINAL_SERVER。
方法详细信息 |
---|
public void setCookiePolicy(CookiePolicy cookiePolicy)
默认情况下,CookieManager 实例具有 cookie 策略 ACCEPT_ORIGINAL_SERVER。用户总是可以调用此方法来设置另一种 cookie 策略。
cookiePolicy
- cookie 策略。可以为
null,表示对当前 cookie 策略没有影响。
public CookieStore getCookieStore()
public Map<String,List<String>> get(URI uri, Map<String,List<String>> requestHeaders) throws IOException
CookieHandler
复制的描述
CookieHandler
中的
get
uri
- 作为请求中 cookie 发送目标的 <code>URI</code>
requestHeaders
- 从请求头字段名到表示当前请求头的字段值列表的 Map
IOException
- 如果发生 I/O * 错误
CookieHandler.put(URI, Map)
public void put(URI uri, Map<String,List<String>> responseHeaders) throws IOException
CookieHandler
复制的描述
CookieHandler
中的
put
uri
- <code>URI</code>,cookie 来自其中
responseHeaders
- 从字段名到表示返回的响应头字段的字段值列表的不可变映射
IOException
- 如果发生 I/O 错误
CookieHandler.get(URI, Map)