18.5 URL
最后的例子有一点含糊,因为现代Internet不是围绕老的协议,如whois、finger及FTP的,而是关于WWW(万维网)的。Web是一个由Web浏览器统一的高级协议和文件格式的松散集合。Web中最重要的一个方面是Tim Berners-Lee设计了一个定位所有网络资源的弹性方法。一旦你能够可靠的命名一个事物,它将成为一个功能强大的范型,统一资源定位(URL)就做这些。URL提供了一个相当容易理解的形式来惟一确定或对Internet上的信息进行编址。URL是无所不在的;每一个浏览器用它们来识别Web上的信息。实际上,Web是用URL 和HTML为所有资源编址的同样陈旧的Internet 。在Java的网络类库中,URL 类为用URL在Internet上获取信息提供了一个简单的、简洁的用户编程接口(API)。
18.5.1 格式化(Format)
http://www.osborne.com/ 和 http://www.osborne.com:80/index.htm是URL 的两个例子。一个URL规范以四个元素为基础。第一个是所用到的协议,用冒号(:)来将它与定位符的其他部分相隔离。尽管现在所有的事情都通过HTTP(实际上,如果你在URL规范中不用“http://”,大多数浏览器都能正确执行)完成,但它不是惟一的协议,常见的协议有http、ftp、gopher和文件。第二个元素是主机名或所用主机的IP地址,这由左边的双斜线(//)和右边的单斜线(/)或可选冒号(:)限制。第三个成分,端口号,是可选的参数,由主机名左边的冒号(:)和右边的斜线(/)限制(它的默认端口为80,它是预定义的HTTP 端口;所以“:80”是多余的)。第四部分是实际的文件路径。多数HTTP服务器将给URL附加一个与目录资源相关的index.html或 index.htm 文件。所以,http://www.osborne.com/ 与http://www.osborne.com/index.htm 是相同的。Java的URL类有多个构造函数,每个都能引发一个MalformedURLException异常。一个常见形式是用与你在浏览器中看到的相同的字符串指定URL:
URL(String urlSpecifier)
下面的两个构造函数形式允许你把URL分裂成它的组成部分:
URL(String protocolName, String hostName, int port, String path)
URL(String protocolName, String hostName, String path)
另一个经常用到的构造函数允许你用一个已经存在的URL作为引用上下文,然后从该上下文中创建一个新的URL。尽管这听起来有些别扭,它实际上是很简单而有用的。
URL(URL urlObj, String urlSpecifier)
下面的例子中,我们为Osborne的下载页面创建一个URL,然后检查它的属性:
// Demonstrate URL.
import java.net.*;
class URLDemo {
public static void main(String args[]) throws MalformedURLException {
URL hp = new URL("http://www.osborne.com/download");
System.out.println("Protocol: " + hp.getProtocol());
System.out.println("Port: " + hp.getPort());
System.out.println("Host: " + hp.getHost());
System.out.println("File: " + hp.getFile());
System.out.println("Ext:" + hp.toExternalForm());
}
}
运行该程序,你将获得下面输出:
Protocol: http
Port: -1
Host: www.osborne.com
File: /download
Ext:http://www.osborne.com/download
注意端口是-1,这意味着该端口没有被明确设置。现在我们已经创建了一个URL对象,我们希望找回与之相连的数据。为获得URL的实际比特或内容信息,用它的openConnection( )方法从它创建一个URLConnection对象,如下:
url.openConnection()
openConnection( ) 有下面的常用形式:
URLConnection openConnection( )
与调用URL对象相关,它返回一个URLConnection对象。它可能引发IOException异常。