URL构造函数不允许缺少或未知的协议。
但这不支持广泛使用的相对URL,例如
<img src="/images/pic.png>
<img src="images/pic.png>
在这些非常常见的情况下,为什么URL构造函数会抛出java.net.MalformedURLException: no protocol
?
URI构造函数支持此类相对URL。
顺便说一句,说“相对URI”而不是“相对URL”是否正确?因为Internet中99%的所有链接都是“相对URL”,而不是“相对URI”
答案 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
URI
和URL
的Java API的设计人员选择(明智地选择IMO)正确使用术语;即根据各自的规范。这就是URL
构造函数将不接受相对 URI 字符串作为参数的原因。
1-它比将蚂蚁称为“错误”更正确。真正的臭虫是半翅目,它是一种昆虫纲昆虫(Insecta),其特征是具有吮吸嘴部的特征。蚂蚁是膜翅目的成员。如Wikipedia所述:“许多通常被称为“虫子”的昆虫也属于其他昆虫;例如,爱情虫是蝇,而梅花虫和瓢虫是甲虫。” (请参阅{{3} }) 我的观点?如果Java设计人员滥用URL / URI区分,他们将与生物学家在科学论文中将蚂蚁称为“臭虫”一样糟糕。
答案 1 :(得分:0)
为什么URL构造函数会抛出java.net.MalformedURLException:否 在这些非常常见的情况下使用协议?
抛出该错误表示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。