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