0

该构造new URL(new URL(new URL("http://localhost:4567"), "abc"), "def")产生(恕我直言不正确)这个网址:http://localhost:4567/def

虽然构造new URL(new URL(new URL("http://localhost:4567"), "abc/"), "def")产生正确的(我想要的)url:http://localhost:4567/abc/def

区别在于abc构造函数参数中的尾部斜杠。

这是预期的行为还是应该在 URL 类中修复的错误?
毕竟,当您使用一些帮助类进行 URL 构造时,我们的想法是不必担心斜线。

4

1 回答 1

3

引用 javadoc 的new URL(URL context, String spec)

否则,该路径将被视为相对路径并附加到上下文路径,如 RFC2396 中所述。

请参阅RFC2396规范的第 5 节“相对 URI 引用” ,特别是第 5.2 节“将相对引用解析为绝对形式”,第 6a 项:

基本 URI 路径组件的最后一段以外的所有部分都被复制到缓冲区。换句话说,最后一个(最右边的)斜线字符之后的任何字符(如果有)都将被排除。

解释

在网页上,“基本 URI”是页面地址,例如http://example.com/path/to/page.html. 一个相对链接,例如<a href="page2.html">,必须被解释为基本 URI的同级page.html,因此被删除,并被page2.html添加,结果http://example.com/path/to/page2.html如预期的那样。

JavaURL类实现了这个逻辑,这就是为什么你得到你所看到的,这完全是它应该工作的方式。

这是设计使然,即不是错误。

于 2015-10-26T18:03:04.300 回答