JavaTM 2 Platform
Standard Ed. 6

java.net
類別 URL

java.lang.Object
  繼承者 java.net.URL
所有已實作的介面:
Serializable

public final class URL
extends Object
implements Serializable

類別 URL 代表一個統一資源定位符,它是指向網際網路“資源”的指針。資源可以是簡單的檔案或目錄,也可以是對更為複雜的物件的參考,例如對資料庫或搜尋引擎的查詢。有關 URL 的型別和格式的更多資訊,可從以下位置找到:

http://www.socs.uts.edu.au/MosaicDocs-old/url-primer.html

通常,URL 可分成幾個部分。上面的 URL 範例指示使用的協議為 http (超文本傳輸協議)並且該資訊駐留在一台名為 www.socs.uts.edu.au 的主機上。主機上的資訊名稱為 /MosaicDocs-old/url-primer.html。主機上此名稱的準確含義取決於協議和主機。該資訊一般存儲在檔案中,但可以隨時產生。該 URL 的這一部分稱為路徑 部分。

URL 可選擇指定一個“埠號”,它是用於建立到遠端主機 TCP 連接的埠號號。如果未指定該埠號號,則使用協議預設的埠號。例如,http 協議的預設埠號為 80。還可以指定一個備用埠號,如下所示:

     http://www.socs.uts.edu.au:80/MosaicDocs-old/url-primer.html
 

URL 的語法由此文檔定義:RFC 2396:Uniform Resource Identifiers (URI):Generic Syntax;在此檔案中對其內容又進行了修正:RFC 2732:Format for Literal IPv6 Addresses in URLs。文字值 IPv6 位址格式還支持 scope_id。scope_id 的語法和用法在此處進行了描述。

URL 後面可能還跟有一個“片段”,也稱為“參考”。該片段由井字元 "#" 指示,後面跟有更多的字元。例如,

     http://java.sun.com/index.html#chapter1
 

從技術角度來講,URL 並不需要包含此片段。但是,使用此片段的目的在於表明,在獲取到指定的資源後,應用程序需要使用文檔中附加有 chapter1 標記的部分。標記的含義特定於資源。

應用程序也可以指定一個“相對 URL”,它只包含到達相對於另一個 URL 的資源的足夠資訊。HTML 頁面中經常使用相對 URL。例如,假設 URL 的內容是:

     http://java.sun.com/index.html
 
其中包含的相對 URL:
     FAQ.html
 
為以下形式的縮寫:
     http://java.sun.com/FAQ.html
 

相對 URL 不需要指定 URL 的所有組成部分。如果缺少協議、主機名稱或埠號號,這些值將從完整指定的 URL 中繼承。但是,必須指定檔案部分。可選的片段部分不繼承。

URL 類別自身並不根據 RFC2396 中定義的轉義機制編碼或解碼任何 URL 部分。由調用方對任何需要在調用 URL 前進行轉義的欄位進行編碼,並對從 URL 返回的任何經過轉義的欄位進行解碼。進一步而言,由於 URL 不懂 URL 轉義,所以它不會識別同一 URL 的對等編碼和解碼形式。例如,對於這兩個 URL:

    http://foo.com/hello world/ 和 http://foo.com/hello%20world
將被視為互不相等。

注意,URI 類別在某些特定情況下對其組成欄位執行轉義。建議使用 URI 管理 URL 的編碼和解碼,並使用 toURI()URI.toURL() 實作這兩個類別之間的轉換。

也可以使用 URLEncoderURLDecoder 類別,但是只適用於 HTML 形式的編碼,它與 RFC2396 中定義的編碼機制不同。

從以下版本開始:
JDK1.0
另請參見:
序列化表格

建構子摘要
URL(String spec)
          根據 String 表示形式創建 URL 物件。
URL(String protocol, String host, int port, String file)
          根據指定 protocolhostport 號和 file 創建 URL 物件。
URL(String protocol, String host, int port, String file, URLStreamHandler handler)
          根據指定的 protocolhostport 號、filehandler 創建 URL 物件。
URL(String protocol, String host, String file)
          根據指定的 protocol 名稱、host 名稱和 file 名稱創建 URL。
URL(URL context, String spec)
          通過在指定的上下文中對給定的 spec 進行解析創建 URL。
URL(URL context, String spec, URLStreamHandler handler)
          通過在指定的上下文中用指定的處理程序對給定的 spec 進行解析來創建 URL。
 
方法摘要
 boolean equals(Object obj)
          比較此 URL 是否等於另一個物件。
 String getAuthority()
          獲取此 URL 的授權部分。
 Object getContent()
          獲取此 URL 的內容。
 Object getContent(Class[] classes)
          獲取此 URL 的內容。
 int getDefaultPort()
          獲取與此 URL 關聯協議的預設埠號號。
 String getFile()
          獲取此 URL 的檔案名。
 String getHost()
          獲取此 URL 的主機名(如果適用)。
 String getPath()
          獲取此 URL 的路徑部分。
 int getPort()
          獲取此 URL 的埠號號。
 String getProtocol()
          獲取此 URL 的協議名稱。
 String getQuery()
          獲取此 URL 的查詢部分。
 String getRef()
          獲取此 URL 的錨點(也稱為“參考”)。
 String getUserInfo()
          獲取此 URL 的 userInfo 部分。
 int hashCode()
          創建一個適合雜湊表索引的整數。
 URLConnection openConnection()
          返回一個 URLConnection 物件,它表示到 URL 所參考的遠端物件的連接。
 URLConnection openConnection(Proxy proxy)
          與 openConnection() 類似,所不同是連接通過指定的代理建立;不支持代理方式的協議處理程序將忽略該代理參數並建立正常的連接。
 InputStream openStream()
          打開到此 URL 的連接並返回一個用於從該連接讀入的 InputStream
 boolean sameFile(URL other)
          比較兩個 URL,不包括片段部分。
protected  void set(String protocol, String host, int port, String file, String ref)
          設置 URL 的欄位。
protected  void set(String protocol, String host, int port, String authority, String userInfo, String path, String query, String ref)
          設置 URL 的指定的 8 個欄位。
static void setURLStreamHandlerFactory(URLStreamHandlerFactory fac)
          設置應用程序的 URLStreamHandlerFactory
 String toExternalForm()
          建構此 URL 的字元串表示形式。
 String toString()
          建構此 URL 的字元串表示形式。
 URI toURI()
          返回與此 URL 等效的 URI
 
從類別 java.lang.Object 繼承的方法
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

建構子詳細資訊

URL

public URL(String protocol,
           String host,
           int port,
           String file)
    throws MalformedURLException
根據指定 protocolhostport 號和 file 創建 URL 物件。

host 可用主機名或文字值 IP 位址表示。如果使用 IPv6 文字值位址,則應將其括在方括號('['']')中,如 RFC 2732 中指定的那樣;但是,在以下文檔中定義的文字值 IPv6 位址格式也可以接受:RFC 2373:IP Version 6 Addressing Architecture

指定 port 號為 -1 指示 URL 應使用協議的預設埠號。

如果這是用指定協議創建的第一個 URL 物件,則還會為該協議創建一個串流協議處理程序 物件(類別 URLStreamHandler 的一個實例):

  1. 如果該應用程序已經預先設置了一個 URLStreamHandlerFactory 的實例作為串流處理程序處理器,則將調用該實例的 createURLStreamHandler 方法(協議字元串為其中的一個參數)以創建串流協議處理程序。
  2. 如果尚未建立 URLStreamHandlerFactory,或者該處理器的 createURLStreamHandler 方法返回 null,則該建構子將尋找如下系統屬性的值:
             java.protocol.handler.pkgs
         
    如果該系統屬性的值為非 null,則它被轉換為一個由垂直線字元 '|'分隔的套件列表。建構子嘗試載入如下名稱的類別:
             <package>.<protocol>.Handler
         
    其中,<package> 用套件的名稱替換,<protocol> 用協議的名稱替換。如果不存在此類別,或者此類別存在但它不是 URLStreamHandler 的子類別,則嘗試列表中的下一個套件。
  3. 如果上面的步驟中未找到協議處理程序,則建構子將嘗試從系統預設包載入。
             <system default package>.<protocol>.Handler
         
    如果不存在此類別,或者該類別存在但它不是 URLStreamHandler 的子類別,則拋出 MalformedURLException

應確保搜尋路徑中包含以下協議的協議處理程序:

http、https、ftp、file 和 jar
 
還可以有其他協議的協議處理程序。

此建構子不執行對輸入的驗證。

參數:
protocol - 要使用的協議名稱。
host - 主機名稱。
port - 主機埠號號。
file - 主機上的檔案
拋出:
MalformedURLException - 如果指定了未知協議。
另請參見:
System.getProperty(java.lang.String), setURLStreamHandlerFactory( java.net.URLStreamHandlerFactory), URLStreamHandler, URLStreamHandlerFactory.createURLStreamHandler( java.lang.String)

URL

public URL(String protocol,
           String host,
           String file)
    throws MalformedURLException
根據指定的 protocol 名稱、host 名稱和 file 名稱創建 URL。使用指定協議的預設埠號。

此方法等同於調用帶四個參數的建構子,四個參數為 protocolhost-1file。 此建構子不執行對輸入的驗證。

參數:
protocol - 要使用的協議名稱。
host - 主機名稱。
file - 主機上的檔案。
拋出:
MalformedURLException - 如果指定了未知協議。
另請參見:
URL(java.lang.String, java.lang.String, int, java.lang.String)

URL

public URL(String protocol,
           String host,
           int port,
           String file,
           URLStreamHandler handler)
    throws MalformedURLException
根據指定的 protocolhostport 號、filehandler 創建 URL 物件。指定 port 號為 -1 指示 URL 應使用協議的預設埠號。指定 handlernull 指示 URL 應使用協議的預設串流處理程序,大致如下:java.net.URL#URL(java.lang.String, java.lang.String, int, java.lang.String)

如果處理程序為非 null,並且有安全管理器,則使用 NetPermission("specifyStreamHandler") 權限調用安全管理器的 checkPermission 方法。結果可能是一個 SecurityException 異常。 此建構子不執行對輸入的驗證。

參數:
protocol - 要使用的協議名稱。
host - 主機名稱。
port - 主機埠號號。
file - 主機上的檔案
handler - URL 的串流處理程序。
拋出:
MalformedURLException - 如果指定了未知協議。
SecurityException - 如果安全管理器存在並且其 checkPermission 方法不允許顯式指定串流處理程序。
另請參見:
System.getProperty(java.lang.String), setURLStreamHandlerFactory( java.net.URLStreamHandlerFactory), URLStreamHandler, URLStreamHandlerFactory.createURLStreamHandler( java.lang.String), SecurityManager.checkPermission(java.security.Permission), NetPermission

URL

public URL(String spec)
    throws MalformedURLException
根據 String 表示形式創建 URL 物件。

此建構子等同於調用兩個參數的建構子,其中,第一個參數為 null

參數:
spec - 將作為 URL 解析的 String
拋出:
MalformedURLException - 如果字元串指定未知協議。
另請參見:
URL(java.net.URL, java.lang.String)

URL

public URL(URL context,
           String spec)
    throws MalformedURLException
通過在指定的上下文中對給定的 spec 進行解析創建 URL。 新的 URL 從給定的上下文 URL 和 spec 參數創建,這在以下文檔中進行了描述:RFC2396 "Uniform Resource Identifiers : Generic * Syntax":
          <scheme>://<authority><path>?<query>#<fragment>
 
該參考被解析為方案、授權、路徑、查詢和片段部分。如果路徑部分為空,方案、授權和查詢部分未定義,則新的 URL 為對當前文檔的參考。否則,新的 URL 中將使用 spec 中出現的片段和查詢部分。

如果給定的 spec 中定義了方案部分,但與上下文的方案不比對,則只根據 spec 創建新的絕對 URL。否則,方案部分從上下文 URL 繼承。

如果 spec 中有授權部分,則將該 spec 視為絕對的,並用 spec 的授權和路徑替換上下文授權和路徑。如果 spec 中沒有授權部分,則新的 URL 的授權將從上下文繼承。

如果 spec 的路徑部分以斜線字元 "/" 開始,則將該路徑視為絕對的,並用 spec 的路徑替換上下文路徑。

否則,如 RFC2396 中所述,該路徑將被視為相對路徑,並被添加到上下文路徑中。此外,在這種情況下,還將通過刪除由 ".." 和 "." 產生的目錄更改對路徑進行規範化處理。

有關 URL 解析的更詳細的描述,請參考 RFC2396。

參數:
context - 要在其中解析規範的上下文。
spec - 將作為 URL 解析的 String
拋出:
MalformedURLException - 如果未指定任何協議,或者找到了未知協議。
另請參見:
URL(java.lang.String, java.lang.String, int, java.lang.String), URLStreamHandler, URLStreamHandler.parseURL(java.net.URL, java.lang.String, int, int)

URL

public URL(URL context,
           String spec,
           URLStreamHandler handler)
    throws MalformedURLException
通過在指定的上下文中用指定的處理程序對給定的 spec 進行解析來創建 URL。如果處理程序為 null,則使用兩參數建構子進行解析。

參數:
context - 要在其中解析規範的上下文。
spec - 將作為 URL 解析的 String
handler - URL 的串流處理程序。
拋出:
MalformedURLException - 如果未指定任何協議,或者找到了未知協議。
SecurityException - 如果安全管理器存在並且其 checkPermission 方法不允許指定串流處理程序。
另請參見:
URL(java.lang.String, java.lang.String, int, java.lang.String), URLStreamHandler, URLStreamHandler.parseURL(java.net.URL, java.lang.String, int, int)
方法詳細資訊

set

protected void set(String protocol,
                   String host,
                   int port,
                   String file,
                   String ref)
設置 URL 的欄位。這不是一個公共方法,所以只有 URLStreamHandler 才能修改 URL 欄位。其他情況下,URL 為常數。

參數:
protocol - 要使用的協議名稱
host - 主機名稱
port - 主機埠號號
file - 主機上的檔案
ref - URL 中的內部參考

set

protected void set(String protocol,
                   String host,
                   int port,
                   String authority,
                   String userInfo,
                   String path,
                   String query,
                   String ref)
設置 URL 的指定的 8 個欄位。這不是一個公共方法,所以只有 URLStreamHandler 才能修改 URL 欄位。其他情況下,URL 為常數。

參數:
protocol - 要使用的協議名稱
host - 主機名稱
port - 主機上的埠號號
authority - url 的授權部分
userInfo - 使用者名和密碼
path - 主機上的檔案
ref - URL 中的內部參考
query - 此 URL 的查詢部分
從以下版本開始:
1.3

getQuery

public String getQuery()
獲取此 URL 的查詢部分。

返回:
URL 的查詢,如果沒有查詢,則返回 null
從以下版本開始:
1.3

getPath

public String getPath()
獲取此 URL 的路徑部分。

返回:
URL 的路徑部分,如果沒有路徑,則返回一個空字元串
從以下版本開始:
1.3

getUserInfo

public String getUserInfo()
獲取此 URL 的 userInfo 部分。

返回:
URL 的 userInfo 部分,如果沒有使用者資訊,則返回 null
從以下版本開始:
1.3

getAuthority

public String getAuthority()
獲取此 URL 的授權部分。

返回:
URL 的授權部分
從以下版本開始:
1.3

getPort

public int getPort()
獲取此 URL 的埠號號。

返回:
埠號號,如果未設置埠號號,則返回 -1

getDefaultPort

public int getDefaultPort()
獲取與此 URL 關聯協議的預設埠號號。如果 URL 方案或 URL 的 URLStreamHandler 未定義預設的埠號號,則返回 -1。

返回:
埠號號
從以下版本開始:
1.4

getProtocol

public String getProtocol()
獲取此 URL 的協議名稱。

返回:
URL 的協議。

getHost

public String getHost()
獲取此 URL 的主機名(如果適用)。主機的格式遵守 RFC 2732,即對於一個文字值 IPv6 位址,該方法將返回括在方括號 ('['']') 中的 IPv6 位址。

返回:
URL 的主機名稱。

getFile

public String getFile()
獲取此 URL 的檔案名。返回的檔案部分將與 getPath() 相同,再加上 getQuery() 值的規範化形式(如果有)。如果沒有查詢部分,此方法和 getPath() 將返回相同的結果。

返回:
URL 的檔案名,如果沒有檔案名,則返回一個空字元串

getRef

public String getRef()
獲取此 URL 的錨點(也稱為“參考”)。

返回:
URL 的錨點(也稱為“參考”),如果沒有錨點,則返回 null

equals

public boolean equals(Object obj)
比較此 URL 是否等於另一個物件。

如果給定的物件不是一個 URL,則此方法立即返回 false

如果兩個 URL 具有相同的協議,參考相同的主機,主機上具有相同的埠號號,檔案相同,片段也都相同,則這兩個 URL 物件相等。

如果兩個主機名可解析為同一 IP 位址,則認為兩個主機相同;如果有一個主機名無法解析,但兩個主機名相等(不區分大小寫),或者兩個主機名都為 null,則也認為這兩個主機相同。

由於主機比較需要進行名稱解析,所以此操作為阻塞操作。

註:equals 定義的行為已知與 HTTP 的虛擬主機行為不一致。

覆寫:
類別 Object 中的 equals
參數:
obj - 要與其比較的 URL。
返回:
如果物件相同,則返回 true;否則,返回 false
另請參見:
Object.hashCode(), Hashtable

hashCode

public int hashCode()
創建一個適合雜湊表索引的整數。

雜湊碼基於所有與 URL 比較相關的 URL 部分。因此,此操作為阻塞操作。

覆寫:
類別 Object 中的 hashCode
返回:
URL 的雜湊碼。
另請參見:
Object.equals(java.lang.Object), Hashtable

sameFile

public boolean sameFile(URL other)
比較兩個 URL,不包括片段部分。

如果此 URLother 參數相等,則返回 true,不考慮片段部分。

參數:
other - 要與其比較的 URL
返回:
如果它們參考相同的遠端物件,則返回 true;否則返回 false

toString

public String toString()
建構此 URL 的字元串表示形式。字元串是通過調用此物件的串流協議處理程序的 toExternalForm 方法創建的。

覆寫:
類別 Object 中的 toString
返回:
此物件的字元串表示形式。
另請參見:
URL(java.lang.String, java.lang.String, int, java.lang.String), URLStreamHandler.toExternalForm(java.net.URL)

toExternalForm

public String toExternalForm()
建構此 URL 的字元串表示形式。字元串是通過調用此物件的串流協議處理程序的 toExternalForm 方法創建的。

返回:
此物件的字元串表示形式。
另請參見:
URL(java.lang.String, java.lang.String, int, java.lang.String), URLStreamHandler.toExternalForm(java.net.URL)

toURI

public URI toURI()
          throws URISyntaxException
返回與此 URL 等效的 URI。此方法的作用與 new URI (this.toString()) 相同。

注意,任何 URL 實例只要遵守 RFC 2396 就可以轉化為 URI。但是,有些未嚴格遵守該規則的 URL 將無法轉化為 URI。

返回:
與此 URL 等效的 URI 實例。
拋出:
URISyntaxException - 如果由於該 URL 格式未嚴格遵守 RFC2396 而無法轉化為 URI。
從以下版本開始:
1.5

openConnection

public URLConnection openConnection()
                             throws IOException
返回一個 URLConnection 物件,它表示到 URL 所參考的遠端物件的連接。

每次調用此 URL 的協議處理程序的 openConnection 方法都打開一個新的連接。

如果 URL 的協議(例如,HTTP 或 JAR)存在屬於以下包或其子包之一的公共、專用 URLConnection 子類別:java.lang、java.io、java.util、java.net,返回的連接將為該子類別的型別。例如,對於 HTTP,將返回 HttpURLConnection,對於 JAR,將返回 JarURLConnection。

返回:
到該 URL 的 URLConnection
拋出:
IOException - 如果發生 I/O 異常。
另請參見:
URL(java.lang.String, java.lang.String, int, java.lang.String), URLConnection, URLStreamHandler.openConnection(java.net.URL)

openConnection

public URLConnection openConnection(Proxy proxy)
                             throws IOException
與 openConnection() 類似,所不同是連接通過指定的代理建立;不支持代理方式的協議處理程序將忽略該代理參數並建立正常的連接。 調用此方法會提示系統的預設 ProxySelector 設置。

參數:
proxy - 進行此連接所需的代理。如果希望使用直接連接,則應指定 Proxy.NO_PROXY。
返回:
到該 URL 的 URLConnection
拋出:
IOException - 如果發生 I/O 異常。
SecurityException - 如果有安全管理器並且調用方沒有連接到代理的權限。
IllegalArgumentException - 如果代理為 null,或代理的型別錯誤
UnsupportedOperationException - 如果實作該協議處理程序的子類別不支持此方法。
從以下版本開始:
1.5
另請參見:
URL(java.lang.String, java.lang.String, int, java.lang.String), URLConnection, URLStreamHandler.openConnection(java.net.URL, java.net.Proxy)

openStream

public final InputStream openStream()
                             throws IOException
打開到此 URL 的連接並返回一個用於從該連接讀入的 InputStream。此方法是下面方法的縮寫:
     openConnection().getInputStream()
 

返回:
從 URL 連接讀入的輸入串流。
拋出:
IOException - 如果發生 I/O 異常。
另請參見:
openConnection(), URLConnection.getInputStream()

getContent

public final Object getContent()
                        throws IOException
獲取此 URL 的內容。此方法是下面方法的縮寫:
     openConnection().getContent()
 

返回:
此 URL 的內容。
拋出:
IOException - 如果發生 I/O 異常。
另請參見:
URLConnection.getContent()

getContent

public final Object getContent(Class[] classes)
                        throws IOException
獲取此 URL 的內容。此方法是下面方法的縮寫:
     openConnection().getContent(Class[])
 

參數:
classes - Java 型別的陣列
返回:
此 URL 的內容物件,它為 classes 陣列中指定的型別的第一個比對項。如果所有請求型別都不受支持,則返回 null。
拋出:
IOException - 如果發生 I/O 異常。
從以下版本開始:
1.3
另請參見:
URLConnection.getContent(Class[])

setURLStreamHandlerFactory

public static void setURLStreamHandlerFactory(URLStreamHandlerFactory fac)
設置應用程序的 URLStreamHandlerFactory。在一個給定的 Java 虛擬機器中,此方法最多只能調用一次。

URLStreamHandlerFactory 實例用於從協議名稱建構串流協議處理程序。

如果有安全管理器,此方法首先調用安全管理器的 checkSetFactory 方法以確保允許該操作。這可能會導致 SecurityException 異常。

參數:
fac - 需要的處理器。
拋出:
Error - 如果應用程序已經設置了處理器。
SecurityException - 如果安全管理器存在並且其 checkSetFactory 方法不允許進行此操作。
另請參見:
URL(java.lang.String, java.lang.String, int, java.lang.String), URLStreamHandlerFactory, SecurityManager.checkSetFactory()

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only