5、URLConnection(2)

缓存

Web浏览器多年来已知在缓存页面和图片

如果对于与网站的图片每一个页面上重复出现

浏览器一般只会加载一次,将其保存在缓冲中,每次加载的时候会从缓存中重新加载

一些HTTP首部可以控制缓存

一般情况下:

一般认为使用GET通过HTTP访问的页面可以缓存,也应当缓存

使用HTTPS或者POST访问的页面通常不应缓存

HTTP首部可以对此做出调整:

  

 

Java的Web缓存

默认情况下,Java并不完成缓存

要安装URL类使用的系统级缓存

 

ResponseCache

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

public abstract CacheRequest put(URI uri, URLConnection conn) throws IOException;

put()方法返回一个CacheRequest对象,包装一个OutputStream

URL将把读取可缓存数据写入这个输出流

CacheRequest是一个抽象类 :

public abstract OutputStream getBody() throws IOException;

public abstract void abort();

子类的getOutputStream()方法应当返回一个OutputStream

指向缓存中的数据库

这个数据库与同时传入put()方法的URI对应

复制出现问题就会调用abort()方法,从缓存中删除这个请求存储的的所有数据

 

 

配置连接

URLConnection类有7个保护的实例字段

定义了客户端如何向服务器做出请求

可以通过相关方法进行设置和访问这些数据:

只能在URLConnection连接之前修改这些字段

获取方法和设置昂发定义了所有URLConnection实例的默认行为

 

 1、protected URL url

url指定这个URLConnection连接的URL

构造函数会在创建对象时设置这个字段,此后不能再改变

可以通过getURL()方法获取这个字段的值

 

2、protected boolean connected

如过连接已经打开值为true

连接关闭则为false

由于创建一个新的URLConnection对象时连接尚未打开,所以初始值为fasle

3、protected boolean allowUserInteraction

是否允许用户交互,默认为false

可以读取和修改该值:

 

4、protected boolean doInput

URLConnection可以用于读取服务器、写入服务器,同时用于读/写服务器

可以用来读取保护类型booleab字段doInput就为true,否则会false

可以是哟个瓯宁宫方法进行访问和修改这个值

 

5、protected boolean doOutput

程序可以使用URLConnection将输出发回服务器

可以用于写入、保护类型boolea字段都Output就为true,否则为false

提供了公共的访问和修改方法

 

6、protected boolean ifModifiedSince

许多客户端会保留以前获取文档的缓存

再次获取可以再缓存中获取

再最后一次获取这个文档之后,服务器上的文档可能改变,需要判断是否有变化,唯一的办法就是询问服务器

提供公共方法进行获取和修改:

 7、protected boolean userCaches

禁用缓存,确保每次获取的请求都是最新版本

 

两个公共方法用于获取和修改这个字段

 

超时

有4个方法可以查询和修改连接的超时设置

底层的Socket等待远程服务器的响应时间

等待多长时间后会抛出SocketTimeoutException

相关方法:

 

配置客户端请求HTTP首部

 

Web服务器可以根据这个信息向不同的客户端提供不同的页面

获取和设置cookie等

每个URLConnection会在首部默认设置一些不同名-值

使用setRequestProperty()方法为HTTP首部增加字段

 

使用该方法指定的名和值为这个URLConnection的首部增加一个字段

这个放法只能再连接打开之前使用

如果已经打开,会抛异常

 getRequestProperty()方法用于返回这个URLConnection所用的HTTP首部中的字段值

 

HTTP允许一个制定名字的属性有多个值

各个值之间用逗号隔开

 

addRequestProperty(String key, String value)

 

用于增加新的属性值

服务器一般会忽略无法识别的首部

HTTP确实对首部字段的名和值的内容进行一些限制

如:名不可包含空白符、值不能包含任何 换行符

 

原文地址:https://www.cnblogs.com/Mrchengs/p/10928327.html