`

URI、URL 和 URN

阅读更多
一直以来对于URL与URI都不太明白,这几天项目中正好用到这两个东西,因此就在网上查了下,为了避免以后继续去查,就把目前用的写下来:
JDK文档引用:
引用

URI 是统一资源标识符,而 URL 是统一资源定位符。因此,笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。上面的 mailto、news 和 isbn URI 都是 URN 的示例。如:

mailto:java-net@java.sun.com
news:comp.lang.java
urn:isbn:096139210x

URI 和 URL 概念上的不同反映在此类和 URL 类的不同中。

此类的实例代表由 RFC 2396 定义的语法意义上的一个 URI 引用。URI 可以是绝对的,也可以是相对的。对 URI 字符串按照一般语法进行解析,不考虑它所指定的方案(如果有)不对主机(如果有)执行查找,也不构造依赖于方案的流处理程序。相等性、哈希计算以及比较都严格地根据实例的字符内容进行定义。换句话说,一个 URI 实例和一个支持语法意义上的、依赖于方案的比较、规范化、解析和相对化计算的结构化字符串差不多。

作为对照,URL 类的实例代表了 URL 的语法组成部分以及访问它描述的资源所需的信息。URL 必须是绝对的,即它必须始终指定一个方案。URL 字符串按照其方案进行解析。通常会为 URL 建立一个流处理程序,实际上无法为未提供处理程序的方案创建一个 URL 实例。相等性和哈希计算依赖于方案和主机的 Internet 地址(如果有);没有定义比较。换句话说,URL 是一个结构化字符串,它支持解析的语法运算以及查找主机和打开到指定资源的连接之类的网络 I/O 操作。


引用

URL 类自身并不根据 RFC2396 中定义的转义机制编码或解码任何 URL 部分。由调用方对任何需要在调用 URL 前进行转义的字段进行编码,并对从 URL 返回的任何经过转义的字段进行解码。进一步而言,由于 URL 不懂 URL 转义,所以它不会识别同一 URL 的对等编码和解码形式。例如,对于这两个 URL:

    http://foo.com/hello world/ 和 http://foo.com/hello%20world

将被视为互不相等。

注意,URI 类在某些特定情况下对其组成字段执行转义。建议使用 URI 管理 URL 的编码和解码,并使用 toURI() 和 URI.toURL() 实现这两个类之间的转换。

也可以使用 URLEncoder 和 URLDecoder 类,但是只适用于 HTML 形式的编码,它与 RFC2396 中定义的编码机制不同。


通过上面的引用,可以看出,一般使用URI对字段参数进行转码,如有中文参数时,就需要这样:


 try {
			return new URI(url).toASCIIString();
		} catch (URISyntaxException e) {
			e.printStackTrace();
			return url;
		}


其中toASCIIString 方法返回不包含任何 other 字符的、完全引用的和经过编码的 URI 字符串。这个方法内部实际上使用的是utf-8的编码方式,所以如果uri中文参数还是为乱码,需要将服务器如tomcat中的server.xml的中加上URIEncoding="UTF-8"。从上面的引用可以看出,这个类比使用URLDecoder通用一些。
至于URL这个类,更多的是打开并获取内容,而不是定位。通过URL可以打开某个网页并提取里面的内容,非常的方便。其实这是一个非常好的想法,如果想获取另一台服务器上的某些数据,就可以这么干,可以不再写什么webservice、hession之类,当然如果数据太复杂太多,那就不能这样做了。
分享到:
评论

相关推荐

    关于URI和URN,URL和java中对应的类.docx

    URI、URL和URN之间的关系是:URI是顶层概念,包括了URL和URN。URL是URI的一种具体形式,用于提供资源的访问途径,而URN则提供了一个永久性的名字,即使资源的物理位置改变,依然可以通过URN找到资源。 在Java中,...

    关于URI和URN,URL和java中对应的类.pdf

    在Java中,URI和URL被分别封装在`java.net.URI`和`java.net.URL`类中。URI 类是一个抽象的概念,主要用于解析和表示URI,但不涉及网络访问。它支持相对URI,并且更加符合相关规范。而URL类则更偏向于实际的网络操作...

    URI,URL常识

    ### URI与URL的基础概念 #### 一、URI(Uniform ...- **总结**:在日常使用中,人们经常将URL和URI这两个术语互换使用,但在技术上,它们有着明确的区别。理解这些概念对于正确地使用和构建互联网资源至关重要。

    URI、URL和URN之间的区别与联系

    其中,URL,URN是URI的子集。 Web上地址的基本形式是URI,它代表统一资源标识符。有两种形式: URL:目前URI的最普遍形式就是无处不在的URL或统一资源定位器。 URN:URL的一种更新形式,统一资源名称(URN, Uniform ...

    URI和URL的区别

    一、URI、URL和URN 二、URI和URL的区别及关系 简而言之,URI是标识某一个资源,而URL用位置来标识一个资源。 一、URI、URL和URN Web上地址的基本形式是URI,它有多种形式:常见的有URL和URN。 URI = Universal ...

    Uri一个URI处理库

    它可能是一个URL(统一资源定位符)或者URN(统一资源名称)。URI通常包括协议、主机名、路径、查询参数等组成部分。 2. **Uri库的结构**: Uri库主要由几个关键类组成,如`UriInterface`、`Uri`和`Parser`等。`...

    Java网络编程之URI、UR

    URI(统一资源标识符)和URL(统一资源定位符)是互联网资源定位的基础概念,而URN(统一资源名称)则是一种特殊的URI,用于持久命名资源。本文将深入探讨这些概念及其在Java中的实现。 首先,URI是全球唯一的资源...

    URI (Java Platform SE 8 )

    Java 8 documentation for class URI, a good reference for recapping the concepts and use cases of URI/URL/URN.

    解析URI与URL之间的区别与联系

    URI(Uniform Resource Identifier)和URL(Uniform Resource Locator)是互联网上资源定位的两种重要概念。它们虽然在功能上有所重叠,但有着明确的区别。 首先,URI,统一资源标志符,是一个抽象的概念,用于唯一...

    浅析什么是URI

    在讨论URI时,常常会遇到其他类似的术语,例如URL(Uniform Resource Locator,统一资源定位符)和URN(Uniform Resource Name,统一资源名称)。这些术语之间的关系如下: - **URL**:URL是一种特殊的URI,用于...

    url和uri区别

    URI(Uniform Resource Identifier)和URL(Uniform Resource Locator)是互联网上资源定位的两种重要概念,它们之间存在着密切的关系,但又有明显的区别。 URI是统一资源标识符,它是一个全局唯一的字符串,用于...

    前端项目-URI.js.zip

    在Web应用中,URI扮演着至关重要的角色,它用于定位网络资源,包括URL(Uniform Resource Locator)和URN(Uniform Resource Name)。URI.js 提供了一套完整的API,使得开发者可以轻松地解析、构建、修改和操作URI。...

    VSoft.Uri-master_SimpleUriParser_

    在IT行业中,URI(Uniform Resource Identifier)是一种标准的标识资源的方式,它包括URL(Uniform Resource Locator)和URN(Uniform Resource Name)。"VSoft.Uri-master_SimpleUriParser_"这个项目是针对URI解析...

    RFC 3986:2005 Uniform Resource Identifier (URI):Generic Syntax -

    URI是互联网上资源的唯一标识符,包括我们常见的URL(Uniform Resource Locator)和URN(Uniform Resource Name)。这份文档详细阐述了URI的构建块、语法、编码规则以及解析过程,对于理解互联网资源的定位和引用至...

    磁力链接(Magnet URI)是一种用于识别文件的链接方式

    ### 磁力链接(Magnet URI):一种基于内容识别的链接方式 #### 一、磁力链接的概念与特点 磁力链接(Magnet URI)是一种特殊的链接格式,主要用于点对点(P2P)文件共享网络中,如BitTorrent。与传统的HTTP或FTP...

    uri-schemes-1.x-源码.rar

    它包含了URL(Uniform Resource Locator)和URN(Uniform Resource Name),是互联网上的资源定位和命名的核心部分。URI schemes则是定义如何解析和访问这些资源的特定协议或方式。本文将深入探讨"uri-schemes-1.x-...

    java-web课本课后简答题.pdf

    URI是URL和URN的超集。 二、动态Web文档技术 * 服务器端动态文档技术包括CGI技术、服务器扩展技术和HTML页面中嵌入脚本技术,例如ASP、PHP和JSP技术。 * 客户端动态文档技术是指在HTML页面中嵌入JavaScript脚本...

    网络游戏-使用JavaScript对在网络浏览器中的分层URI解除引用的机制.zip

    分层URI(Hierarchical Uniform Resource Identifier)是互联网上资源的唯一标识,如URL(Uniform Resource Locator)和URN(Uniform Resource Name)。本资料主要探讨了如何使用JavaScript来处理和解析这些在网络...

    uri:一组用于构建URI和创建解析格式良好的URL的实用程序

    URI包含了URL(Uniform Resource Locator)和URN(Uniform Resource Name)两种类型,URL指定资源的位置,而URN则指定了资源的名称。在编程中,处理URI的操作经常是必要的,比如解析、构建和验证。这个“uri”库可能...

Global site tag (gtag.js) - Google Analytics