Java基礎鞏固——網路程式設計基礎 URL
此教程總結是根據JDK 8編寫的
什麼是URL?
URL是統一資源定位器的首字母縮寫。它是Internet上資源的引用(地址)
URL有兩個主要元件:
- 協議識別符號:對於URL
http://example.com
,協議識別符號為http
。 - 資源名稱:對於URL
http://example.com
,資源名稱為example.com
資源名是資源的完整地址。資源名稱的格式完全取決於所使用的協議,但對於大多數協議(包括HTTP協議),資源名稱包含以下一個或多個元件:
主機名 | 資源所在機器的名稱。 |
檔名 | 計算機上檔案的路徑名。 |
埠號 | 要連線的埠號(通常是可選的)。 |
Reference | 對資源中已命名錨的引用,它通常標識檔案中的特定位置(通常是可選的)。 |
建立URL
建立URL物件的最簡單方法是使用String,該String表示URL地址的人類可讀形式。這通常是其他人用於URL的表單。在Java程式中,您可以使用包含此文字的String來建立URL物件:
URL myURL = new URL("http://example.com/");
上面建立的URL物件表示絕對路徑的URL。絕對路徑的URL包含到達相關資源所需的所有資訊。您還可以從相對路徑的URL地址建立URL物件。
建立相對路徑URL
相對URL規範通常在HTML檔案中使用,例如:
<a href="PicturesOfMe.html">Pictures of Me</a>
<a href="MyKids.html">Pictures of My Kids</a>
其中 href="PicturesOfMe.html" 指向了相對路徑的PicturesOfMe.html檔案
我們可是使用絕對路徑URL建立相對路徑的URL:http://example.com/pages/,如下所示:
URL myURL = new URL("http://example.com/pages/");
//page1URL生成的URL相當於http://example.com/pages/page1.html
URL page1URL = new URL(myURL, "page1.html");
//page2URL生成的URL相當於http://example.com/pages/page2.html
URL page2URL = new URL(myURL, "page2.html");
對此示例中的特殊字元進行編碼很容易,因為只有一個字元需要編碼,但對於具有多個這些字元的URL地址,或者如果您不確定在編寫程式碼時需要訪問哪些URL地址,您可以使用java.net.URI類的多引數建構函式自動為您處理編碼。
URI uri = new URI("http", "example.com", "/hello world/", "");
然後將URI轉換為URL。
URL url = uri.toURL();
如果建構函式的引數引用null或未知協議,則四個URL建構函式中的每一個都會丟擲MalformedURLException。我們可以通過在try / catch對中嵌入URL建構函式語句來捕獲和處理此異常,如下所示:
try {
URL myURL = new URL(...);
}
catch (MalformedURLException e) {
// exception handler code here
// ...
}
注意:
URLs是所有的資訊都是“一次寫入”物件的屬性中。一旦建立了
URL
物件,就無法更改其任何屬性(協議,主機名,檔名或埠號)。
解析URL
本URL
類提供了一些方法,可以讓你查詢URL
的物件。您可以使用以下訪問器方法從URL獲取協議,許可權,主機名,埠號,路徑,查詢,檔名和引用:
getProtocol
返回URL的協議識別符號元件。
getAuthority
返回URL的許可權元件。
getHost
返回URL的主機名元件。
getPort
返回URL的埠號元件。該getPort
方法返回一個整數,即埠號。如果未設定埠,則getPort
返回-1。
getPath
返回此URL的路徑元件。
getQuery
返回此URL的查詢元件。
getFile
返回URL的檔名元件。該getFile
方法返回相同getPath
的值,加上值的串聯(getQuery
如果有的話)。
getRef
返回URL的引用元件。