首页 > 解决方案 > 为什么 URL 构造函数不允许相对 URL?

问题描述

URL 构造函数不允许丢失或未知协议。

但这不支持广泛使用的相对 URL,例如

  1. 根相对 URL<img src="/images/pic.png>
  2. 页面/基本相对 URL<img src="images/pic.png>

为什么 URL 构造函数会java.net.MalformedURLException: no protocol在这些非常常见的情况下抛出?

URI 构造函数支持这样的相对 URL。

顺便说一句,说“相对 URI”而不是“相对 URL”是否正确?因为互联网上 99% 的所有链接都是“相对 URL”,而不是“相对 URI”

标签: javaurluri

解决方案


为什么URL构造函数抛出java.net.MalformedURLException:在这些非常常见的情况下没有协议?

因为这些不是有效的 URL。

URI 构造函数支持这样的相对 URL。

不正确。它允许相对URI

顺便说一句,说“相对 URI”而不是“相对 URL”是否正确?因为互联网上 99% 的所有链接都是“相对 URL”,而不是“相对 URI”。

不,这是不正确的1

URI 和 URL 的规范清楚地表明“相对 URL”不是有效的术语。见https://www.rfc-editor.org/rfc/rfc3986

Java API 的设计者(明智URIURL选择 IMO)正确使用术语;即根据各自的规范。这就是URL构造函数不接受相对URI字符串作为参数的原因。


1 - 将蚂蚁称为“虫子”并不正确。真正的虫子是半翅目,它是昆虫纲(昆虫)的一个目,其特点是有吸嘴部分。蚂蚁是膜翅目的成员。正如维基百科所说:“许多通常被称为“虫子”的昆虫属于其他目;例如,爱情虫是苍蝇,而五月虫和瓢虫是甲虫。 (见维基百科)我的观点?如果 Java 设计者滥用 URL / URI 的区别,他们将与生​​物学家在科学论文中将蚂蚁称为“虫子”一样糟糕。


推荐阅读