Java URL(一)——概念、构造

Java URL


URL(Uniform Resource Locator)是一个指向网络上资源的引用(或地址)。

可以通过向Web浏览器提供URLs来定位Internet上的文件。

互联网上彼此交互的Java程序也可使用URL在互联网上找寻其想要访问的资源。Java程序可以使用java.net包下的URL类代表URL地址。

1 什么是URL

URL使用字符串形式描述如何在Internet上找寻一个资源。URLs由两个主要的组成部分:访问资源需要的协议以及资源的位置。

虽然不是很准确,但可以将URL看作World Wide Web上的文件的名称,因为大多数的URL是指网络中某些机器上的文件。不过,需要注意,URL也可以指网络中的其他资源,例如数据库查询与命令输出。

URL有两个主组件:

注意:协议标识符与资源名称之间由一个冒号与两个前斜杠隔开。
协议标识符指出了用于获取资源的协议的名称。

资源名称是资源的完整地址。资源名称的格式完全依赖于使用的协议。

对于大多协议来说,资源名称包含一些相同的组件:

  • 主机名称:资源所在机器的名称
  • 文件名:文件位于机器上的路径
  • 端口号:选择连接的端口(通常为可选)
  • 引用:用于表示文件中特定位置的资源中的已命名锚的引用(通常为可选)

对于大多数协议来说,主机名与文件名是必须的,而端口号与引用是可选的。

2 创建URL

创建URL对象的一个简单方法是通过一个表示可读形式的URL地址的String来创建。

URL myURL = new URL("http://example.com/");

ps:这种方法创建出的URL代表绝对URL。
ps:绝对URL包含了抵达相关资源的所有信息。

创建相对于其他URL的URL对象

相对URL只包含抵达相对于其他URL的资源的充足信息。

相对URL规格通常被用于HTML文件中。
假设,有三个HTML文件,A.html、B.html、C.html,这三个文件位于同一台机器的同一个目录下,此时A.html中关于B.html与C.html的链接只需要提供文件名即可。

<a href="B.html">B</a>
<a href="C.html">C</a>

note:这些URL地址即为相对URL。

以此类推,假设hhh.com下有两个URL:http://hhh.com/dir/a、http://hhh.com/dir/b。

那么通过相对地址创建URL对象即:

URL my = new URL("http://hhh.com/dir/");
URL a = new URL(my, "a");
URL b = new URL(my, "b");

构造器形式为:

URL(URL baseURL, String relativeURL)

其他URL构造器
URL额外提供了两种构造器来创建URI对象。

new URL("http", "eee.com", "/sss");

note:http://eee.com/sss
note:第一个参数为协议名,第二个为主机名,第三个为文件的路径名。

注意,文件名在开始处包含一个前斜杠。这表示文件名是从主机的根目录处定义的。

URL url = new URL("http", "eee.com", "80", "aaa");

note:http://eee.com/sss
如果使用这些构造器构造URL,可以通过URL的toString方法或其等价的toExternalForm方法获取完整的String形式的URL地址。

带有特殊字符的URL地址
一些URL地址包含特殊字符,例如空格符。e.g. http://eee/iii ooo/

在将这些字符传入URL构造器之前,需要对这些字符进行编码实质合法化。

URL url = new URL("http://eee/iii%20ooo");

当URL地址中存在多个需要编码的字符时,为了确保正确,可以使用java.net.URI类的多参构造器来自动处理编码。

URI uri = new URI("http", "eee", "/iii ooo/", "");
URL url = uri.toURL();

MalformedURLException
如果构造器参数引用null或一个未知的协议,URL构造器将会抛出一个MalformedURLException。

注意:URLs是“一次写入”对象。一旦完成URL对象的创建,便不能再修改它的属性,即协议、主机名、文件名、端口号等。

翻译源:Java tutorial 网络篇

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值