构造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构建时,所有想法都不用担心斜杠。
答案 0 :(得分:3)
引用new URL(URL context, String spec)
的javadoc:
否则,路径将被视为相对路径,并附加到上下文路径,如RFC2396中所述。
参见第5节"相对URI参考" RFC2396规范,特别是5.2和#34;解决绝对形式的相对引用",第6a项:
基本URI路径组件的最后一段除了复制到缓冲区之外。换句话说,排除最后一个(最右边)斜杠字符后的任何字符(如果有)。
说明的
在网页上,"基本URI"是页面地址,例如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
类实现了这个逻辑,这就是为什么你得到你所看到的,它完全是它应该工作的方式。
这是设计上的,即不是错误。