在我們做開發時,經常有URI和URL弄混的問題,如果當時直接看URI和URL的源碼就不可能弄混。首先我總結一下URI和URL的關系:他們的關系是:URL是一種特殊的URI,是URI包括URL,
下面用公式的形式說明URI到底是什么?
URI=[scheme:]<scheme-specific-part>[#fragment] 這正好可以用URI類中的getScheme getSchemeSpecificPart 以及getFragment得到.
在scheme為null時,這個URI被稱為相對的URI。 在scheme不為空時URI稱為絕對的URI
而<scheme-specfic-part>=[//authority]<path>[:query]
在path為空時稱為不透明的URI,在不為空時稱為透明的URI
authority 又可以分為:[userinfo@]<host>[:port]
從這個公式我們可以看到URI確實包括URL。
下面寫一個示例代碼
package com.timo; import java.net.URI; public class URITest { public static void main(String[] args) throws Exception{ //創建一個uri,根據[scheme:]<scheme-specific-part>[#fragment] URI uri = new URI("http", "//qinlin@localhost:8080/oi/oi?user='aieg'", "iewio"); System.out.println(uri); System.out.println(uri.getPath()); } }
調試代碼的圖片如下,從下圖可以看到上述公式的各個值是什么。

