URLConnection是一个抽象类,表示指向URL指定资源的活动链接java
有两个不一样但相关的用途:浏览器
一、与URL类相比,他对服务器的交互提供了更多的控制,能够检查服务器发送的首部服务器
并响应地作出响应,能够设置客户端中请求中使用的首部字段,能够用POST、PUT和其余请求方法向服务器发回数据函数
二、是Java的协议处理器的机制的一部分,这个机制还包括URLStreamHandler编码
协议处理器的思想:将 处理协议的细节与处理特定数据类型分开,提供相应的用户接口,完成整个WEB浏览器所完成的其余操做spa
基类java.net.URLConnection是抽象类,要实现一个特定的协议,就要编写一个子类,这些子类能够在运行时由应用程序加载.net
使用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........
能够用来获取表示日期的首部字段(Expires、Date、Last-modified首部)
为了将字符串转换为整数
getHeaderFieldDate()使用了java.util.Date的parseDate()方法
parseDate()方法在理解和转换大多数常见日期格式上很是好
若是parseDate()不理解这个日期或者getHeaderFieldDate()没法找到请求所请求的首部字段,就会返回default参数
可使用java.util.Date类将long转换为String类型
五、getHeaderFieldInt(String name,int default)
这个方法获取首部字段name的值,尝试将其转换为int
失败缘由:多是没法找到锁清秋的首部字段,也可能由于该字段不包含一个可识别的整数,就会返回default默认值