繁体   English   中英

构造URL中的java.net.URL错误?

[英]java.net.URL bug in constructing URLs?

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

虽然构造new URL(new URL(new URL("http://localhost:4567"), "abc/"), "def")产生正确的(对我而言是http://localhost:4567/abc/def )URL: http://localhost:4567/abc/def

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

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

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

否则,如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 ,如预期的那样。

Java URL类实现了这种逻辑,这就是为什么您得到所见即所得的原因,而这完全是它应该起作用的方式。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM