五、URLConnection(1)

 

URLConnection是一个抽象类,表示指向URL指定资源的活动链接java

有两个不一样但相关的用途:浏览器

一、与URL类相比,他对服务器的交互提供了更多的控制,能够检查服务器发送的首部服务器

   并响应地作出响应,能够设置客户端中请求中使用的首部字段,能够用POST、PUT和其余请求方法向服务器发回数据函数

二、是Java的协议处理器的机制的一部分,这个机制还包括URLStreamHandler编码

  协议处理器的思想:将 处理协议的细节与处理特定数据类型分开,提供相应的用户接口,完成整个WEB浏览器所完成的其余操做spa

  基类java.net.URLConnection是抽象类,要实现一个特定的协议,就要编写一个子类,这些子类能够在运行时由应用程序加载.net

 

 

打开URLConnection

使用URLConnection类的程序遵循如下几个基本步骤:3d

跳过步骤3:某种URL的默认设置是能够接收的对象

跳过步骤4:只须要服务器的数据,不关心任何元信息或者协议不提供任何元信息blog

跳过步骤6:只但愿接收服务器数据,而不想服务器发送数据

 

URLConnection类仅有一个构造函数为保护类型

 

除非派生URLConnection的子类来处理新的URL类型

不然经过调用URL类的openConnection()方法来建立一个对象 

 

 

 URLConnection类声明为抽象类

必须由子类实现的一个方法是connect()创建与服务器的链接,顾依赖服务类型(HTTP、FTP等)

 

读取服务器的数据

URLConnection对象从一个URL获取所须要的代码的步骤:

 

 getiInputStream()返回一个通用的InputStream对象能够读取和解析服务器发送的数据

打印结果:

 

URL和URLConnection之间的不一样:

 

读取首部

HTTP服务器在每一个相应前面的首部中都提供了大量信息

 

HTTP首部可能包括请求文档的内容类型、文档长度、对内容的编码所采用的字符集、日期时间

内容过时时间以及最后修改日期等

具体的信息依赖于服务器

 

获取指定的首部字段

能够得到请求中特定的经常使用字段:

 

一、getContentType()

返回相应主体中的MIME内容类型

依赖于Web服务器发送的一个有效内容类型

若是没有提供内容类型,不会抛异常,返回null

 

二、getContentLength()

返回内容中有多少字节

若是没有Content-length首部,就会返回-1

这个方法不会抛异常

若是须要准确的知道跑读取的字节数

或者须要预先建立一个足够大的缓冲区来保存数据可使用这个方法

 

 

 

三、getContentEncoding()

指定内容容是如何编码的

若是发送的内容没有编码就会返回null,不抛异常

 

 

Web上最经常使用的内容编码方式多是x-gzip

可使用java.util.zip.GZipInputStream直接解码

 

四、getDate()

 

返回一个long

指定文档什么时候发送,这个时间按格林尼治时间(GMT)1970年1月1日子夜过去了多少毫秒来给出

能够转为java.util.Date

若是HTTP首部不包括Date字段、getDate()返回0

 

五、getExpiration()

基于服务器的过时时间

指示应合适从缓冲区删除文档

并从服务器从新下载

 

与getDate()方式相似,区别在于如何解析返回的值

返回一个long,指示自GMT 1970年1月1日子夜12:00后的毫秒数

文档在这一时刻过时

文档中不包含Expiration字段则返回为0

表示文档永久不过时

 

 

六、getLastModified()

返回文档最后的修改日期

依旧是GMT....

若是HTTP首部没有包括Last-modified字段返回为0

 

 获取任意首部字段

一、getHeaderField(String name)

返回指定首部字段的值

首部不区分大小写,也不包括结束冒号

能够获得Date、Content-length、Expires首部

只要将name值传入便可

 

这些方法返回的都是String

 

二、getHeaderFieldKey(int n)

返回第n个首部字段的键(字段名)

请求方法 自己是第0个首部,它的键位null

第一个首部即编号位1

 

 三、getHeaderField(int n)

 

返回第n个首部字段的值

 

 

四、getHeaderFieldDate(String name,long default)

首先获取由name参数指定的首部字段

而后尝试将这个字符串转换为一个long

指示自GMT........

能够用来获取表示日期的首部字段(ExpiresDateLast-modified首部)

 为了将字符串转换为整数

getHeaderFieldDate()使用了java.util.Date的parseDate()方法

parseDate()方法在理解和转换大多数常见日期格式上很是好

若是parseDate()不理解这个日期或者getHeaderFieldDate()没法找到请求所请求的首部字段,就会返回default参数

 

 可使用java.util.Date类将long转换为String类型

 

 五、getHeaderFieldInt(String name,int default)

这个方法获取首部字段name的值,尝试将其转换为int

失败缘由:多是没法找到锁清秋的首部字段,也可能由于该字段不包含一个可识别的整数,就会返回default默认值

 

相关文章
相关标签/搜索