在对openConnection()的调用返回后,调用了connect()方法--用于建立某种资源的连接。(尽管openConnection()方法返回一个连接对象的引用,但是openConnection()不会连接到资源)。 URLConnection的getHeaderFields()方法返回一个对象的应用,该对象的类实现了java.util.Map接口。
该图表(map)包含头部名称和值的集合。什么是头部(header)?头部是基于文本的名称/值对,它识别资源数据的类型、数据的长度等等。
在编译了URLDemo2后,在命令行输入java URLDemo2 http://www.javajeff.com,输出如下:
Date=[Sun, 17 Feb 2002 17:49:32 GMT]
Connection=[Keep-Alive]
Content-Type=[text/html; charset=iso-8859-1]
Accept-Ranges=[bytes]
Content-Length=[7214]
ull=[HTTP/1.1 200 OK]
ETag=["4470e-1c2e-3bf29d5a"]
Keep-Alive=[timeout=15, max=100]
Server=[Apache/1.3.19 (Unix) Debian/GNU]
Last-Modified=[Wed, 14 Nov 2001 16:35:38 GMT]
Input allowed = true
Output allowed = false
上面的输出识别了很多头部(包括Date、null、Content-Length、 Server、Last-Modified等等)和它们的值。输出也显示只允许从资源读取数据。
你对一个程序是如何识别资源数据的是否感到惊奇?仔细看一下前面的输出,你会看到叫做Content-Type的东西。Content-Type是一个头部,它识别了资源数据(内容)的类型是text/html。text部分就是我们所知道的类型,html部分是我们所知道的子类型。
(如果内容是普通的文本,Content-Type的值可能是text/plain。上面的类型表明内容是文本的但不是没有格式的)。Content-Type头部是我们所知道的多用途Internet邮件扩展(MIME)的一部分。
MIME是传统的传输消息的7位ASCII标准的一种扩展。通过引入了多种头部,MIME使视频、声音、图像、不同字符集的文本与7位ASCII结合起来。有了Content-Type,MIME可以识别Content-Length和其它标准的头部。当你使用URLConnection类的时候,你会遇到getContentType()和getContentLength()。这些方法返回的值是Content-Type和Content-Length头部。