• 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确实对首部字段的名和值的内容进行一些限制

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

     

  • 相关阅读:
    关于数据库字符集编码及通用软件产品的设计表结构的注意事项
    记一次调用第三方接口,对方获取到参数乱码问题
    Java获取固定格式日期&计算日期相差时长
    Redis之雪崩、穿透、击穿
    [LeetCode] 两数相加 (JavaScript 解法)
    React hooks 获取 dom 引用
    PHP + Redis 实现定任务触发
    测试PHP几种方法写入文件的效率与安全性
    如何调整firefox鼠标滚轮速度
    美美Apple ID 注册教程
  • 原文地址:https://www.cnblogs.com/Mrchengs/p/10928327.html
Copyright © 2020-2023  润新知