【问题标题】:Why URI constructor allows missing protocol (while URL does not)?为什么 URI 构造函数允许缺少协议(而 URL 不允许)?
【发布时间】:2019-06-01 23:20:00
【问题描述】:

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

wikipedia 中,Scheme(甚至是 Path)似乎是 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 不需要)。

【问题讨论】:

  • 显示抛出MalformedURLException异常的代码

标签: java url uri


【解决方案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");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    • 2015-07-14
    • 1970-01-01
    相关资源
    最近更新 更多