從JDK1.4開始,java.net包對統一資源定位符(uniform resource locator URL)和統一資源標識符(uniform resource identifier URI)作了非常有用的區分。
URI是個純粹的句法結構,用於指定標識Web資源的字符串的各個不同部分。URL是URI的一個特例,它包含了定位Web資源的足夠信息。其他URI,比如:
mailto:[email protected]
則不屬於定位符,因爲根據該標識符無法定位任何資源。像這樣的URI我們稱之爲URN(統一資源名稱)。
在Java類庫中,URI類不包含任何訪問資源的方法,它唯一的作用就是解析。相反的是,URL類可以打開一個到達資源的流。因此URL類只能作用於那些Java類庫知道該如何處理的模式,例如:http:,https:,ftp:,本地文件系統(file:),和Jar文件(jar:)。
URI類的作用之一是解析標識符並將它們分解成各個不同的組成部分。你可以用以下方法讀取它們:
getSchema
getHost
getPort
getPath
getQuery
URI類的另一個作用是處理絕對標識符和相對標識符。如果存在一個如下的絕對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的轉換。
與此相反的過程成爲相對化。例如:假設你有一個基本URI:
和另一個URI:
http://docs.mycompany/api/java/lang/String.html
那麼相對化後的URI就是:
java/lang/String.html