[英]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.