创建一个 URL
创建URL
对象的最简单方法是从String
代表 URL 地址的可读形式。这通常是其他人用于 URL 的形式。在 Java 程序中,可以使用String
包含以下文本来创建URL
对象:
URL myURL = new URL("http://example.com/");
上面创建的URL
对象表示*绝对 URL 。绝对 URL 包含访问相关资源所需的所有信息。您也可以从相对 URL *地址创建URL
对象。
创建相对于另一个的 URL
相对 URL 仅包含足够的信息以到达相对于另一个 URL(或在另一个 URL 中)的资源。
相对 URL 规范通常在 HTML 文件中使用。例如,假设您编写了一个名为JoesHomePage.html
的 HTML 文件。在此页面内,是指向其他页面PicturesOfMe.html
和MyKids.html
的链接,这些页面与JoesHomePage.html
处于同一计算机上,并且位于同一目录中。可以将JoesHomePage.html
到PicturesOfMe.html
和MyKids.html
的链接指定为文件名,如下所示:
<a href="PicturesOfMe.html">Pictures of Me</a>
<a href="MyKids.html">Pictures of My Kids</a>
这些 URL 地址是*相对 URL *。也就是说,URL 是相对于其中包含的文件JoesHomePage.html
来指定的。
在 Java 程序中,您可以根据相对 URL 规范创建URL
对象。例如,假设您知道站点example.com
上的两个 URL:
http://example.com/pages/page1.html
http://example.com/pages/page2.html
您可以相对于它们的通用基本 URL:http://example.com/pages/
为这些页面创建URL
对象,如下所示:
URL myURL = new URL("http://example.com/pages/");
URL page1URL = new URL(myURL, "page1.html");
URL page2URL = new URL(myURL, "page2.html");
此代码段使用URL
构造函数,该构造函数使您可以从另一个URL
对象(基础)和相对 URL 规范中创建URL
对象。该构造函数的一般形式为:
URL(URL baseURL, String relativeURL)
第一个参数是URL
对象,它指定新URL
的基础。第二个参数是String
,它指定相对于基础的其余资源名称。如果baseURL
为 null,则此构造函数将relativeURL
视为绝对 URL 规范。相反,如果relativeURL
是绝对 URL 规范,则构造函数将忽略baseURL
。
此构造函数对于在文件中为命名锚(也称为引用)创建URL
对象很有用。例如,假设page1.html
文件在文件底部具有名为BOTTOM
的命名锚。您可以使用相对 URL 构造函数为其创建URL
对象,如下所示:
URL page1BottomURL = new URL(page1URL,"#BOTTOM");
其他 URL 构造函数
URL
类为创建URL
对象提供了两个附加的构造函数。当您使用 URL 的 URL 名称部分中包含主机名,文件名,端口号和引用组件的 URL(例如 HTTP URL)时,这些构造函数很有用。当您没有包含完整 URL 规范的 String,但您确实知道 URL 的各种组成部分时,这两个构造函数很有用。
例如,假设您设计一个类似于文件浏览面板的网络浏览面板,该面板允许用户选择协议,主机名,端口号和文件名。您可以从面板的组件中构建URL
。第一个构造函数根据协议,主机名和文件名创建URL
对象。以下代码段在example.com
站点上为page1.html
文件创建了URL
:
new URL("http", "example.com", "/pages/page1.html");
这相当于
new URL("http://example.com/pages/page1.html");
第一个参数是协议,第二个参数是主机名,最后一个参数是文件的路径名。请注意,文件名开头包含一个正斜杠。这表明文件名是从主机的根目录指定的。
最后的URL
构造函数将端口号添加到前一个构造函数使用的参数列表中:
URL gamelan = new URL("http", "example.com", 80, "pages/page1.html");
这将为以下 URL 创建一个URL
对象:
http://example.com:80/pages/page1.html
如果使用这些构造函数之一构造URL
对象,则可以使用URL
对象的toString
方法或等效的toExternalForm
方法来获取包含完整 URL 地址的String
。
具有特殊字符的 URL 地址
某些 URL 地址包含特殊字符,例如空格字符。像这样:
http://example.com/hello world/
为了使这些字符合法,需要在将它们传递给 URL 构造函数之前对其进行编码。
URL url = new URL("http://example.com/hello%20world");
在此示例中,对特殊字符进行编码很容易,因为只有一个字符需要编码,但是对于具有多个这些字符的 URL 地址,或者如果不确定在编写代码时需要访问哪些 URL 地址,您可以使用java.net.URI类的多参数构造函数自动为您处理编码。
URI uri = new URI("http", "example.com", "/hello world/", "");
然后将 URI 转换为 URL。
URL url = uri.toURL();
MalformedURLException
如果构造函数的参数引用null
或未知协议,则四个URL
构造函数中的每个都将引发MalformedURLException
。通常,您想通过将 URL 构造函数语句嵌入try
/catch
对中来catch并处理此异常,如下所示:
try {
URL myURL = new URL(...);
}
catch (MalformedURLException e) {
// exception handler code here
// ...
}
有关处理异常的信息,请参见Exceptions。
Note:
URL
是“一次写入”对象。创建URL
对象后,您将无法更改其任何属性(协议,主机名,文件名或端口号)。