Java中URL、URI和URN的區別


現代網際網路的核心是全球資訊網,它包含數十億個網站和資源。透過遵循協議,有多種方法可以訪問這些基於 Web 的資源。Java擁有網路的概念,用於建立客戶端與這些資源之間的通訊。但是,要在數百萬個可用資源中找到特定資源,我們需要一個唯一的識別符號。有三個元件:URI、URL 和 URN,它們可以幫助我們在網上找到特定的資源。它們共同服務於單一目的,但本文將討論 URI、URL 和 URN 之間的區別。

Java 中 URI 與 URL 與 URN 的比較

URI

它是統一資源識別符號 (Uniform Resource Identifier) 的縮寫。它包含一系列字元,用於標識 Web 上的資源。它定義了一個方案,例如 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”。

URL

其全稱是統一資源定位符 (Uniform Resource Locator)。它提供了一種透過給定資源的地址在網際網路上唯一定位和訪問資源的功能。URL 有四個組成部分:

  • 協議

  • 主機名或 IP 地址

  • 埠號

  • 路徑

Java 網路的 URL 類用於藉助 URL 建立連線或查詢網際網路上的資源。此類會丟擲 MalformedURLException。

語法

URL nameOfObject = new URL( "URLspecifier" );

其中

URLspecifier 是實際的 URL,或者可以說是資源的連結。它必須用雙引號括起來。

示例

https://example.com/login?username=User123&password=MyPasswrd

上面的 URL 示例表明使用者正在嘗試使用使用者名稱“User123”和密碼“MyPasswrd”登入“example.com”網站。

URN

它是統一資源名稱 (Uniform Resource Name) 的縮寫。它定義了特定資源的名稱。換句話說,URN 是一種特殊的 URI,它透過名稱而不是位置來標識資源。它具有 urn 方案和一個名稱空間識別符號(例如 isbn 和 uuid),該識別符號指定資源的命名許可權。由於網際網路上物件命名缺乏通用標準,這種資源識別方法已失敗。

示例

urn:example:resource:books:12345

在上面的 URN 示例中,我們使用了“example”名稱空間,後跟資源識別符號“resource:books:12345”。URN 格式由分號分隔的不同元件組成的分層結構組成。

方法

  • 首先,定義一個 URI 類的例項,並將檔案的連結傳遞給其建構函式。

  • 再次,使用 URI 物件定義 URL 類的例項,以便我們可以與給定的連結建立連線。

  • 現在,使用 getScheme() 方法檢索連結中使用的協議的名稱。

  • 最後,使用內建方法 getContentType() 來確定給定檔案的型別。

示例

以下示例演示了在 Java 程式中 URI 和 URL 的實際實現。

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);
         // retrieving type of the file
         System.out.println("Type of the content: " + urlConn.getContentType());
      }
      catch(Exception exp) {
         System.out.println("Something went wrong!! Please check the link!!");
      }
   }
}

輸出

The name of protocol is: https
Type of the content: null

URI、URL 和 URN 之間的區別

URI

URL

URN

它可以定位和訪問網際網路上可用的資源。

它還可以定位和檢索網際網路上的資源。

它只能命名資源。

如果相應的資源被修改,則可以更新 URI。

如果相應的資源被修改,則也可以更新 URL。

它是永續性的,不依賴於資源的位置或名稱。

URI 包含 URN 和 URL。

URL 是 URI 的子集。

URN 是 URI 的子集。

結論

在本文中,我們解釋了用於定位 Web 上可用資源的元件。這些元件是 URI、URL 和 URN。URI 是 URN 和 URL 的超集。它可以透過名稱、位置或兩者來標識資源。

更新於:2023年7月21日

瀏覽量:363

啟動您的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.