|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.net.URL
public final class URL
類別 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 的內容是:
其中包含的相對 URL:http://java.sun.com/index.html
為以下形式的縮寫: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()
實作這兩個類別之間的轉換。
也可以使用 URLEncoder
和 URLDecoder
類別,但是只適用於 HTML 形式的編碼,它與 RFC2396 中定義的編碼機制不同。
建構子摘要 | |
---|---|
URL(String spec)
根據 String 表示形式創建 URL 物件。 |
|
URL(String protocol,
String host,
int port,
String file)
根據指定 protocol 、host 、port 號和 file 創建 URL 物件。 |
|
URL(String protocol,
String host,
int port,
String file,
URLStreamHandler handler)
根據指定的 protocol 、host 、port 號、file 和 handler 創建 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 |
建構子詳細資訊 |
---|
public URL(String protocol, String host, int port, String file) throws MalformedURLException
protocol
、host
、port
號和 file
創建 URL
物件。
host
可用主機名或文字值 IP 位址表示。如果使用 IPv6 文字值位址,則應將其括在方括號('[' 和 ']')中,如 RFC 2732 中指定的那樣;但是,在以下文檔中定義的文字值 IPv6 位址格式也可以接受:RFC 2373:IP Version 6 Addressing Architecture。
指定 port
號為 -1
指示 URL 應使用協議的預設埠號。
如果這是用指定協議創建的第一個 URL 物件,則還會為該協議創建一個串流協議處理程序 物件(類別 URLStreamHandler
的一個實例):
URLStreamHandlerFactory
的實例作為串流處理程序處理器,則將調用該實例的 createURLStreamHandler
方法(協議字元串為其中的一個參數)以創建串流協議處理程序。
URLStreamHandlerFactory
,或者該處理器的 createURLStreamHandler
方法返回 null
,則該建構子將尋找如下系統屬性的值:
如果該系統屬性的值為非java.protocol.handler.pkgs
null
,則它被轉換為一個由垂直線字元 '|
'分隔的套件列表。建構子嘗試載入如下名稱的類別:
其中,<package> 用套件的名稱替換,<protocol> 用協議的名稱替換。如果不存在此類別,或者此類別存在但它不是<package>.<protocol>.Handler
URLStreamHandler
的子類別,則嘗試列表中的下一個套件。
如果不存在此類別,或者該類別存在但它不是<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)
public URL(String protocol, String host, String file) throws MalformedURLException
protocol
名稱、host
名稱和 file
名稱創建 URL。使用指定協議的預設埠號。
此方法等同於調用帶四個參數的建構子,四個參數為 protocol
、host
、-1
和 file
。
此建構子不執行對輸入的驗證。
protocol
- 要使用的協議名稱。host
- 主機名稱。file
- 主機上的檔案。
MalformedURLException
- 如果指定了未知協議。URL(java.lang.String, java.lang.String, int, java.lang.String)
public URL(String protocol, String host, int port, String file, URLStreamHandler handler) throws MalformedURLException
protocol
、host
、port
號、file
和 handler
創建 URL
物件。指定 port
號為 -1
指示 URL 應使用協議的預設埠號。指定 handler
為 null
指示 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
public URL(String spec) throws MalformedURLException
String
表示形式創建 URL
物件。
此建構子等同於調用兩個參數的建構子,其中,第一個參數為 null
。
spec
- 將作為 URL 解析的 String
。
MalformedURLException
- 如果字元串指定未知協議。URL(java.net.URL, java.lang.String)
public URL(URL context, String spec) throws MalformedURLException
該參考被解析為方案、授權、路徑、查詢和片段部分。如果路徑部分為空,方案、授權和查詢部分未定義,則新的 URL 為對當前文檔的參考。否則,新的 URL 中將使用 spec 中出現的片段和查詢部分。<scheme>://<authority><path>?<query>#<fragment>
如果給定的 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)
public URL(URL context, String spec, URLStreamHandler handler) throws MalformedURLException
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)
方法詳細資訊 |
---|
protected void set(String protocol, String host, int port, String file, String ref)
protocol
- 要使用的協議名稱host
- 主機名稱port
- 主機埠號號file
- 主機上的檔案ref
- URL 中的內部參考protected void set(String protocol, String host, int port, String authority, String userInfo, String path, String query, String ref)
protocol
- 要使用的協議名稱host
- 主機名稱port
- 主機上的埠號號authority
- url 的授權部分userInfo
- 使用者名和密碼path
- 主機上的檔案ref
- URL 中的內部參考query
- 此 URL 的查詢部分public String getQuery()
URL
的查詢部分。
URL
的查詢,如果沒有查詢,則返回 null
public String getPath()
URL
的路徑部分。
URL
的路徑部分,如果沒有路徑,則返回一個空字元串public String getUserInfo()
URL
的 userInfo 部分。
URL
的 userInfo 部分,如果沒有使用者資訊,則返回 null
public String getAuthority()
URL
的授權部分。
URL
的授權部分public int getPort()
URL
的埠號號。
public int getDefaultPort()
URL
關聯協議的預設埠號號。如果 URL 方案或 URL 的 URLStreamHandler 未定義預設的埠號號,則返回 -1。
public String getProtocol()
URL
的協議名稱。
URL
的協議。public String getHost()
URL
的主機名(如果適用)。主機的格式遵守 RFC 2732,即對於一個文字值 IPv6 位址,該方法將返回括在方括號 ('[' 和 ']') 中的 IPv6 位址。
URL
的主機名稱。public String getFile()
URL
的檔案名。返回的檔案部分將與 getPath()
相同,再加上 getQuery()
值的規範化形式(如果有)。如果沒有查詢部分,此方法和 getPath()
將返回相同的結果。
URL
的檔案名,如果沒有檔案名,則返回一個空字元串public String getRef()
URL
的錨點(也稱為“參考”)。
URL
的錨點(也稱為“參考”),如果沒有錨點,則返回 null
public boolean equals(Object obj)
如果給定的物件不是一個 URL,則此方法立即返回 false
。
如果兩個 URL 具有相同的協議,參考相同的主機,主機上具有相同的埠號號,檔案相同,片段也都相同,則這兩個 URL 物件相等。
如果兩個主機名可解析為同一 IP 位址,則認為兩個主機相同;如果有一個主機名無法解析,但兩個主機名相等(不區分大小寫),或者兩個主機名都為 null,則也認為這兩個主機相同。
由於主機比較需要進行名稱解析,所以此操作為阻塞操作。
註:equals
定義的行為已知與 HTTP 的虛擬主機行為不一致。
Object
中的 equals
obj
- 要與其比較的 URL。
true
;否則,返回 false
。Object.hashCode()
,
Hashtable
public int hashCode()
雜湊碼基於所有與 URL 比較相關的 URL 部分。因此,此操作為阻塞操作。
Object
中的 hashCode
URL
的雜湊碼。Object.equals(java.lang.Object)
,
Hashtable
public boolean sameFile(URL other)
如果此 URL
和 other
參數相等,則返回 true
,不考慮片段部分。
other
- 要與其比較的 URL
。
true
;否則返回 false
。public String toString()
URL
的字元串表示形式。字元串是通過調用此物件的串流協議處理程序的 toExternalForm
方法創建的。
Object
中的 toString
URL(java.lang.String, java.lang.String, int, java.lang.String)
,
URLStreamHandler.toExternalForm(java.net.URL)
public String toExternalForm()
URL
的字元串表示形式。字元串是通過調用此物件的串流協議處理程序的 toExternalForm
方法創建的。
URL(java.lang.String, java.lang.String, int, java.lang.String)
,
URLStreamHandler.toExternalForm(java.net.URL)
public URI toURI() throws URISyntaxException
URI
。此方法的作用與 new URI (this.toString())
相同。
注意,任何 URL 實例只要遵守 RFC 2396 就可以轉化為 URI。但是,有些未嚴格遵守該規則的 URL 將無法轉化為 URI。
URISyntaxException
- 如果由於該 URL 格式未嚴格遵守 RFC2396 而無法轉化為 URI。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。
URLConnection
。
IOException
- 如果發生 I/O 異常。URL(java.lang.String, java.lang.String, int, java.lang.String)
,
URLConnection
,
URLStreamHandler.openConnection(java.net.URL)
public URLConnection openConnection(Proxy proxy) throws IOException
proxy
- 進行此連接所需的代理。如果希望使用直接連接,則應指定 Proxy.NO_PROXY。
URLConnection
。
IOException
- 如果發生 I/O 異常。
SecurityException
- 如果有安全管理器並且調用方沒有連接到代理的權限。
IllegalArgumentException
- 如果代理為 null,或代理的型別錯誤
UnsupportedOperationException
- 如果實作該協議處理程序的子類別不支持此方法。URL(java.lang.String, java.lang.String, int, java.lang.String)
,
URLConnection
,
URLStreamHandler.openConnection(java.net.URL, java.net.Proxy)
public final InputStream openStream() throws IOException
URL
的連接並返回一個用於從該連接讀入的 InputStream
。此方法是下面方法的縮寫:
openConnection().getInputStream()
IOException
- 如果發生 I/O 異常。openConnection()
,
URLConnection.getInputStream()
public final Object getContent() throws IOException
openConnection().getContent()
IOException
- 如果發生 I/O 異常。URLConnection.getContent()
public final Object getContent(Class[] classes) throws IOException
openConnection().getContent(Class[])
classes
- Java 型別的陣列
IOException
- 如果發生 I/O 異常。URLConnection.getContent(Class[])
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。