java.net.URL构建URL的错误?

时间:2015-10-26 16:58:59

标签: java url construction

构造new URL(new URL(new URL("http://localhost:4567"), "abc"), "def")产生(imho错误)此网址:http://localhost:4567/def

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

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

这是预期的行为还是这是一个应该在URL类中修复的错误?
当你使用一些帮助类进行URL构建时,所有想法都不用担心斜杠。

1 个答案:

答案 0 :(得分:3)

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

  

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

参见第5节"相对URI参考" RFC2396规范,特别是5.2和#34;解决绝对形式的相对引用",第6a项:

  

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

说明

在网页上,&#34;基本URI&#34;是页面地址,例如http://example.com/path/to/page.html。相对链接,例如<a href="page2.html">必须被解释为基本URI的 sibling ,因此会移除page.html,并添加page2.html,从而产生http://example.com/path/to/page2.html,如预期的那样。

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

这是设计上的,即不是错误。