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 的实际实现。

Open Compiler
import java.net.*; public class URIExample { public static void main(String args[]) throws Exception { try { // link of file URI uri = new URI("https://tutorialspoint.com/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

启动您的职业生涯

完成课程获得认证

开始
广告