java网络编程之缓存(二)

来源:互联网 发布:日本tv直播软件 编辑:程序博客网 时间:2024/05/01 17:58


对比上一节“java网络编程之缓存(一)”的内容,我们这节讲述的是java的Web缓存。

java的Web缓存大体包括三个类:

CacheRequest

CacheResponse

ResponseCache


JDK API中对这三个类的定义如下:


CacheRequest

从java5开始,表示在 ResponseCache 中存储资源的通道。这种类的实例提供一个 OutputStream 对象,协议处理程序可以调用该对象来将资源数据存储到缓存中;另外还提供一个 abort() 方法,该方法允许中断和放弃缓存存储操作。如果从缓存读取响应或将响应写入缓存时遇到 IOException,则将中止当前缓存存储操作。 

方法详细信息:

(一)public abstract OutputStream getBody()
                              throws IOException

返回可以将响应正文写入其中的 OutputStream。 


返回:
可以将响应正文写入的 OutputStream 
抛出: 
IOException - 如果写入响应正文时发生 I/O 错误

(二)public abstract void abort()

中止缓存响应的尝试。如果从缓存读取响应或将响应写入缓存时遇到 IOException,则放弃当前缓存存储操作。 

CacheResponse

从java5开始,表示从 ResponseCache 获取资源的通道。这种类的实例提供返回实体正文的 InputStream,同时提供一个返回关联响应头的 getHeaders() 方法。 

方法详细信息:

(一)public abstract Map<String,List<String>> getHeaders()
                                             throws IOException

以 Map 的形式返回响应头。 


返回:
一个不可变的 Map,其将响应头字段名称映射到字段值列表。状态行以 null 作为其字段名称。 
抛出: 
IOException - 如果在获取响应头时发生 I/O 错误。

(二)public abstract InputStream getBody()
                             throws IOException以 InputStream 的形式返回响应正文。 


返回:
可以从中访问响应正文的 InputStream 
抛出: 
IOException - 如果获取响应正文时发生 I/O 错误

ResponseCache

从java5开始,表示 URLConnection 缓存的实现。这种类的实例可以通过执行 ResponseCache.setDefault(ResponseCache) 向系统注册,系统将调用此对象以便: 

将从外部源获得的资源数据存储到缓存中 试图获取可能存储在缓存中的请求资源 ResponseCache 实现决定应该缓存的资源和缓存它们的时间。如果无法从缓存获得请求资源,则协议处理程序将从其初始位置获取该资料。 URLConnection#useCaches 的设置控制着是否允许协议使用缓存的响应。 

有关 HTTP 缓存的更多信息,请参见 RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1。 

方法详细信息:

(一)public static ResponseCache getDefault()获取系统级响应缓存。 


返回:
系统级 ResponseCache 
抛出: 
SecurityException - 如果安装了安全管理器并且它拒绝 NetPermission("getResponseCache")
从以下版本开始: 
1.5 
另请参见:
setDefault(ResponseCache)

(二)public static void setDefault(ResponseCache responseCache)设置(或取消设置)系统级缓存。 注:非标准协议处理程序可能忽略此设置。 


参数:
responseCache - 响应缓存,或者为 null,表示取消设置缓存。 
抛出: 
SecurityException - 如果安装了安全管理器并且它拒绝 NetPermission("setResponseCache")
从以下版本开始: 
1.5 
另请参见:
getDefault()

(三)public abstract CacheResponse get(URI uri,
                                  String rqstMethod,
                                  Map<String,List<String>> rqstHeaders)
                           throws IOException根据请求的 uri、请求方法和请求头获取缓存的响应。通常,此方法由协议处理程序在发出获取网络资源的请求之前调用。如果返回缓存的响应,则改为使用该资源。 


参数:
uri - 用于引用所请求的网络资源的 URI
rqstMethod - 表示请求方法的 String
rqstHeaders - 从请求头字段名称到表示当前请求头的字段值列表的映射 
返回:
CacheResponse 实例,如果可从缓存中得到;否则返回 null 
抛出: 
IOException - 如果发生 I/O 错误 
IllegalArgumentException - 如果参数中的任何一个为 null
另请参见:
URLConnection.setUseCaches(boolean), URLConnection.getUseCaches(), URLConnection.setDefaultUseCaches(boolean), URLConnection.getDefaultUseCaches()

(四)public abstract CacheRequest put(URI uri,
                                 URLConnection conn)
                          throws IOException协议处理程序在获得资源后调用此方法,ResponseCache 必须决定是否在其缓存中存储资源。如果缓存资源,则 put() 必须返回 CacheRequest 对象,该对象包含协议处理程序用来将资源写入缓存的 WriteableByteChannel。如果不缓存资源,则 put 必须返回 null。 


参数:
uri - 用于引用所请求的网络资源的 URI
conn - 用于获取要缓存的响应的 URLConnection 实例 
返回:
用于记录要缓存的响应的 CacheRequest。返回 null 指示调用方不打算缓存响应。 
抛出: 
IOException - 如果发生 I/O 错误 
IllegalArgumentException - 如果参数中的任何一个为 null

0 0