從JDK1.4開始,java.net包對統(tǒng)一資源定位符(uniform resource locator URL)和統(tǒng)一資源標(biāo)識符(uniform resource identifier URI)作了非常有用的區(qū)分。
URI是個純粹的句法結(jié)構(gòu),用于指定標(biāo)識Web資源的字符串的各個不同部分。URL是URI的一個特例,它包含了定位Web資源的足夠信息。其他URI,比如:
mailto:cay@horstman.com
則不屬于定位符,因為根據(jù)該標(biāo)識符無法定位任何資源。像這樣的URI我們稱之為URN(統(tǒng)一資源名稱)。
在Java類庫中,URI類不包含任何訪問資源的方法,它唯一的作用就是解析。相反的是,URL類可以打開一個到達(dá)資源的流。因此URL類只能作用于那些Java類庫知道該如何處理的模式,例如:http:,https:,ftp:,本地文件系統(tǒng)(file:),和Jar文件(jar:)。
URI類的作用之一是解析標(biāo)識符并將它們分解成各個不同的組成部分。你可以用以下方法讀取它們:
getSchema
getHost
getPort
getPath
getQuery
URI類的另一個作用是處理絕對標(biāo)識符和相對標(biāo)識符。如果存在一個如下的絕對URI:
http://docs.mycompany.com/api/java/net/serversocket.html
和一個如下的相對URI:
../../java/net/socket.html#Socket()
那么你可以將它們合并成一個絕對URI:
http://docs.mycompany.com/api/java/net/socket.html#Socket()
這個過程被稱為相對URL的轉(zhuǎn)換。
與此相反的過程成為相對化。例如:假設(shè)你有一個基本URI:
和另一個URI:
http://docs.mycompany/api/java/lang/String.html
那么相對化后的URI就是:
java/lang/String.html