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 的子集,並在給定名稱空間內透過名稱識別資源。

更新於: 2023-07-21

76 次檢視

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.