Java 中 URI 和 URN 的區別
現代網際網路的核心是全球資訊網,它擁有數十億個網站和資源。透過遵循協議,有多種方法可以訪問這些基於 Web 的資源。Java 擁有網路的概念,用於建立客戶端與這些資源之間的通訊。但是,要在數百萬個可用資源中找到特定資源,我們需要一個唯一的識別符號。有三個元件:URI、URL 和 URN,它們可以幫助我們在網路上定位特定的資源。本文旨在解釋 Java 中 URI 和 URN 的區別。
Java 中 URI 與 URN 的比較
URI
它是統一資源識別符號的縮寫。它包含一系列字元,用於標識網路上的資源。它定義了一個方案,例如 http、ftp、mailto 等,指定如何訪問資源。URI 允許在同一上下文中使用各種資源識別符號,而不管用於訪問這些資源的方法之間的差異。Java 在 'java.net' 包中提供了 URI 類。
語法
URI nameOfObject = new URI( "URIspecifier" );
這裡,URIspecifier 是實際的 URI,或者我們可以稱之為資源的連結。
例項
https://example.com/resource?id=12345&category=books
在上面的 URI 示例中,我們有一個假設的域名 'example.com',後面跟著資源路徑 '/resource'。它還包括兩個查詢引數,名為 'id',值為 '12345',以及 'category',值為 'books'。
URN
它是統一資源名稱的首字母縮寫。它定義了某個資源的名稱。換句話說,URN 是一種特殊的 URI,它透過名稱而不是位置來標識資源。它具有 urn 方案和名稱空間識別符號(例如 isbn 和 uuid),指定資源的命名許可權。由於網際網路上物件命名缺乏通用標準,這種識別資源的方法失敗了。
例項
urn:example:resource:books:12345
在上面的 URN 示例中,我們使用了 'example' 名稱空間,後面跟著資源識別符號 'resource:books:12345'。URN 格式由分層結構組成,不同的元件用冒號分隔。
示例 1
在下面的示例中,我們將使用 'java.net' 包的一些內建方法和類來檢查給定 URI 中使用的協議。
import java.net.*;
public class URIExample {
public static void main(String args[]) throws Exception {
try {
// link of file
URI uri = new URI("https://tutorialspoint.tw/java/pdf/java_networking.pdf");
// creating URL object from the URI
URL url = uri.toURL();
// making connection with the file
URLConnection urlConn = url.openConnection();
// retrieving the name of protocol
String scheme = uri.getScheme();
System.out.println("The name of protocol is: " + scheme);
}
catch(Exception exp) {
System.out.println("Something went wrong!! Please check the link!!");
}
}
}
輸出
The name of protocol is: https
在上面的程式碼中,我們建立了一個 URI 類的例項,並將檔案的連結傳遞給它的建構函式。然後,使用 URI 定義了一個 URL 類的例項,以便我們可以與給定的連結建立連線。使用 getScheme() 方法,我們檢索了連結中使用的協議的名稱。
URI 和 URN 之間的區別
下表顯示了 URI 和 URN 之間的區別:
URI |
URN |
|---|---|
它可以定位網際網路上可用的資源。 |
它只能命名資源。 |
如果相應資源發生修改,URI 可以更新。 |
它是持久的,不依賴於資源的位置或名稱。 |
它包含比 URN 更多的資訊。 |
它包含比 URI 更少的資訊。 |
URI 由 URN 和 URL 組成。 |
URN 是 URI 的子集。 |
結論
URI 是 URN 和 URL 的超集。它可以透過名稱、位置或兩者來識別資源。另一方面,URN 是 URI 的子集,並在給定名稱空間內透過名稱識別資源。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP