此教程总结是根据JDK 8编写的
什么是URL?
URL是统一资源定位器的首字母缩写。它是Internet上资源的引用(地址)
URL有两个主要组件:
- 协议标识符:对于URL
http://example.com
,协议标识符为http
。 - 资源名称:对于URL
http://example.com
,资源名称为example.com
资源名是资源的完整地址。资源名称的格式完全取决于所使用的协议,但对于大多数协议(包括HTTP协议),资源名称包含以下一个或多个组件:
主机名 | 资源所在机器的名称。 |
文件名 | 计算机上文件的路径名。 |
端口号 | 要连接的端口号(通常是可选的)。 |
Reference | 对资源中已命名锚的引用,它通常标识文件中的特定位置(通常是可选的)。 |
创建URL
创建URL对象的最简单方法是使用String,该String表示URL地址的人类可读形式。这通常是其他人用于URL的表单。在Java程序中,您可以使用包含此文本的String来创建URL对象:
URL myURL = new URL("http://example.com/");
上面创建的URL对象表示绝对路径的URL。绝对路径的URL包含到达相关资源所需的所有信息。您还可以从相对路径的URL地址创建URL对象。
创建相对路径URL
相对URL规范通常在HTML文件中使用,例如:
<a href="PicturesOfMe.html">Pictures of Me</a>
<a href="MyKids.html">Pictures of My Kids</a>
其中 href="PicturesOfMe.html" 指向了相对路径的PicturesOfMe.html文件
我们可是使用绝对路径URL创建相对路径的URL:http://example.com/pages/,如下所示:
URL myURL = new URL("http://example.com/pages/");
//page1URL生成的URL相当于http://example.com/pages/page1.html
URL page1URL = new URL(myURL, "page1.html");
//page2URL生成的URL相当于http://example.com/pages/page2.html
URL page2URL = new URL(myURL, "page2.html");
对此示例中的特殊字符进行编码很容易,因为只有一个字符需要编码,但对于具有多个这些字符的URL地址,或者如果您不确定在编写代码时需要访问哪些URL地址,您可以使用java.net.URI类的多参数构造函数自动为您处理编码。
URI uri = new URI("http", "example.com", "/hello world/", "");
然后将URI转换为URL。
URL url = uri.toURL();
如果构造函数的参数引用null或未知协议,则四个URL构造函数中的每一个都会抛出MalformedURLException。我们可以通过在try / catch对中嵌入URL构造函数语句来捕获和处理此异常,如下所示:
try {
URL myURL = new URL(...);
}
catch (MalformedURLException e) {
// exception handler code here
// ...
}
注意:
URLs是所有的信息都是“一次写入”对象的属性中。一旦创建了
URL
对象,就无法更改其任何属性(协议,主机名,文件名或端口号)。
解析URL
本URL
类提供了一些方法,可以让你查询URL
的对象。您可以使用以下访问器方法从URL获取协议,权限,主机名,端口号,路径,查询,文件名和引用:
getProtocol
返回URL的协议标识符组件。
getAuthority
返回URL的权限组件。
getHost
返回URL的主机名组件。
getPort
返回URL的端口号组件。该getPort
方法返回一个整数,即端口号。如果未设置端口,则getPort
返回-1。
getPath
返回此URL的路径组件。
getQuery
返回此URL的查询组件。
getFile
返回URL的文件名组件。该getFile
方法返回相同getPath
的值,加上值的串联(getQuery
如果有的话)。
getRef
返回URL的引用组件。