url在构造url时的错误



结构new URL(new URL(new URL("http://localhost:4567"), "abc"), "def")产生(虽然不正确)此url: http://localhost:4567/def

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

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

这是预期的行为或这是一个错误,应该在URL类修复?
毕竟,当您使用一些帮助类来构建URL时,不需要担心斜杠。

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

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

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

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

解释

在网页上,"Base URI"是页面地址,例如http://example.com/path/to/page.html。相对链接,例如<a href="page2.html">,必须被解释为基础URI的兄弟,因此page.html被删除,page2.html被添加,结果如预期的http://example.com/path/to/page2.html

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

它是通过设计,即不是一个错误。

相关内容

  • 没有找到相关文章

最新更新