为什么URI构造函数允许缺少协议(而URL不允许)?

时间:2019-01-07 09:48:40

标签: java url uri

为什么URI允许缺少协议(而URL不允许)?

wikipedia中,方案(甚至是路径)似乎是URI的强制性组成部分:

  

URI通用语法由五个层次结构组成   组件:[8]

     

URI = 方案:[// authority] 路径 [?query] [#fragment]

或者缺少的协议默认为某些内容(例如http)?我在文档中什么都没找到。

new URI("my.html");        // 1
new URI("xabc:my.html");   // 2
new URL("my.html");        // 3      
new URL("xabc:my.html");   // 4

关于“强制性”路径-好的,存在倾斜URI。但是为什么要允许缺少协议(即使对于绝对必需的斜率URI也应该存在该协议)

我可以理解,相对 URL / URI不需要协议(<img src="/images/pic.png">),但是在这种情况下,URL也给出了运行时java.net.MalformedURLException: no protocol(而URI不')。

1 个答案:

答案 0 :(得分:1)

您的相对路径一定是错误的, Java的URI支持相对URI的空方案:

  

相对URI,即未指定方案的URI。分层URI的一些示例是:

docs/guide/collections/designfaq.html#28

方案是可选的:

[scheme:]scheme-specific-part[#fragment]

类似于URL,例如:

URL url = new URL("/guidelines.txt");