为什么URL构造函数不允许相对URL?

时间:2019-01-07 10:00:40

标签: java url uri

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”是否正确?因为Internet中99%的所有链接都是“相对URL”,而不是“相对URI”

3 个答案:

答案 0 :(得分:1)

  

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

因为这些网址无效。

  

URI构造函数支持此类相对URL。

不正确。它允许相对的 URI

  

顺便说一句,用“相对URI”代替“相对URL”是正确的吗?因为Internet中99%的所有链接都是“相对URL”,而不是“相对URI”。

不。 1 不正确。

URI和URL的规范清楚表明“相对URL”不是有效的术语。参见https://tools.ietf.org/html/rfc3986

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


1-它比将蚂蚁称为“错误”更正确。真正的臭虫是半翅目,它是一种昆虫纲昆虫(Insecta),其特征是具有吮吸嘴部的特征。蚂蚁是膜翅目的成员。如Wikipedia所述:“许多通常被称为“虫子”的昆虫也属于其他昆虫;例如,爱情虫是蝇,而梅花虫和瓢虫是甲虫。” (请参阅{{3} }) 我的观点?如果Java设计人员滥用URL / URI区分,他们将与生​​物学家在科学论文中将蚂蚁称为“臭虫”一样糟糕。

答案 1 :(得分:0)

  

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

根据documentation

  

抛出该错误表示URL格式错误。没有合法的   协议可以在规范字符串中找到,或者该字符串可以   无法解析。

示例1:https://stackoverflow.com/something/java/something”->它将引发错误

示例1.1: https://stackoverflow.com/something/java/something->不会引发错误。

从简单的意义上讲,它意味着->示例1:未在字符串内部进行解析。 ,因此请删除“”。

URIs 标识和URLs 定位;但是,定位符也是标识符,因此每个URL也是一个URI,但是有些URI并非URL。

暴露的维恩图:( URIs ( URLs ) )

维恩图上方表示:URL比URI更

答案 2 :(得分:0)

URL由协议,主机和该主机上存在的资源等不同部分组成。

相对URI不包含用于创建URL的所有信息,因此会引发java.net.MalformedURLException。