簡體   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