Java URI和URN的区别
现代互联网主要指的是拥有数十亿个网站和资源的万维网。有多种方式可以通过遵循协议访问这些基于Web的资源。Java具有用于建立客户端与这些资源之间通信的网络概念。但是,要在数百万可用资源中定位特定资源,我们需要一个唯一标识符。有三个组件:URI、URL和URN,可以帮助我们在Web上定位某个特定资源。本文旨在解释Java中URI和URN的区别。
Java中的URI与URN比较
URI
这是Uniform Resource Locator的缩写。它由一系列字符组成,用于标识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’。
URN
URN是Uniform Resource Name的缩写,表示统一资源名称。它定义了某个资源的名称。换句话说,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://www.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);
}
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的子集,通过给定命名空间内的名称来标识资源。