首先,URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。而URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。而URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:java-net@java.sun.com。也就是说,URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。
在Java的URI中,一个URI实例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则。而URL类则不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的,schema必须被指定。
ok,现在回答文章开头提出的问题,到底是imgUrl好呢,还是imgUri好?显然,如果说imgUri是肯定没问题的,因为即使它实际上是url,那它也是uri的一种。那么用imgUrl有没有问题呢?此时则要看它的可能取值,如果是绝对路径,能够定位的,那么用imgUrl是没问题的,而如果是相对路径,那还是不要用ImgUrl的好。总之,用imgUri是肯定没问题的,而用imgUrl则要视实际情况而定。
第二个,从HttpServletRequest的javadoc中可以看出,getRequestURI返回一个String,“the part of this request’s URL from the protocol name up to the query string in the first line of the HTTP request”,比如“POST /some/path.html?a=b HTTP/1.1”,则返回的值为”/some/path.html”。现在可以明白为什么是getRequestURI而不是getRequestURL了,因为此处返回的是相对的路径。而getRequestURL返回一个StringBuffer,“The returned URL contains a protocol, server name, port number, and server path, but it does not include query string parameters.”,完整的请求资源路径,不包括querystring。
总结一下:URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,所以,是绝对的,而通常说的relative URL,则是针对另一个absolute URL,本质上还是绝对的。
注:这里的绝对(absolute)是指包含scheme,而相对(relative)则不包含scheme。
URI抽象结构 [scheme:]scheme-specific-part[#fragment]
[scheme:][//authority][path][?query][#fragment]
authority为[user-info@]host[:port]
参考资料:
http://docs.oracle.com/javase/1.5.0/docs/api/java/net/URI.html
http://en.wikipedia.org/wiki/Uniform_Resource_Identifier
http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html
ps:
java.net.URL类不提供对标准RFC2396规定的特殊字符的转义,因此需要调用者自己对URL各组成部分进行encode。而java.net.URI则会提供转义功能。因此The recommended way to manage the encoding and decoding of URLs is to use java.net.URI. 可以使用URI.toURL()和URL.toURI()方法来对两个类型的对象互相转换。对于HTML FORM的url encode/decode可以使用java.net.URLEncoder和java.net.URLDecoder来完成,但是对URL对象不适用。
原文地址:
http://www.cnblogs.com/gaojing/archive/2012/02/04/2413626.html
URI:统一资源标识
URL:统一资源 定位
URN:统一资源名称
例如:www.baidu.com是URL 但不是URI
www.baidu.com/index.html 是URL 同时也是URI。
好像不太对啊, 因为 www.baidu.com = www.baidu.com/index.html
所以,URL 就是 URI 的 定位。
但URI 不一定是 URL。
因为 URI有一类子集是 URN,它命名资源 但 不指定 如何定位资源。
如: mailto, news等,需要 加上 相应的结构参数,才能进行 统一资源定位。
如: mailto:aykimforward@qq.com
因此,三者之间的关系是:URI 一定是 URL
URN+结构参数 = URI 就是 URL。
分享到:
相关推荐
URI、URL和URN之间的关系是:URI是顶层概念,包括了URL和URN。URL是URI的一种具体形式,用于提供资源的访问途径,而URN则提供了一个永久性的名字,即使资源的物理位置改变,依然可以通过URN找到资源。 在Java中,...
URI 不仅包括了 URL(Uniform Resource Locator,统一资源定位符),还包含了 URN(Uniform Resource Name,统一资源名称)。URL 是 URI 的一个子集,它提供了资源的具体位置,可以用来获取资源。URL 的结构通常包含...
#### 三、URI与URL之间的区别及联系 - **区别**: - **URI**是对资源的标识,不提供如何访问该资源的信息。 - **URL**是一种特殊的URI,不仅标识资源,还提供访问资源的方法。 - **URN**(Uniform Resource Name...
二、URI和URL的区别及关系 简而言之,URI是标识某一个资源,而URL用位置来标识一个资源。 一、URI、URL和URN Web上地址的基本形式是URI,它有多种形式:常见的有URL和URN。 URI = Universal Resource Identifier ...
其中,URL,URN是URI的子集。 Web上地址的基本形式是URI,它代表统一资源标识符。有两种形式: URL:目前URI的最普遍形式就是无处不在的URL或统一资源定位器。 URN:URL的一种更新形式,统一资源名称(URN, Uniform ...
它可能是一个URL(统一资源定位符)或者URN(统一资源名称)。URI通常包括协议、主机名、路径、查询参数等组成部分。 2. **Uri库的结构**: Uri库主要由几个关键类组成,如`UriInterface`、`Uri`和`Parser`等。`...
URI(Uniform Resource Identifier)和URL(Uniform Resource Locator)是互联网上资源定位的两种重要概念。它们虽然在功能上有所重叠,但有着明确的区别。 首先,URI,统一资源标志符,是一个抽象的概念,用于唯一...
在讨论URI时,常常会遇到其他类似的术语,例如URL(Uniform Resource Locator,统一资源定位符)和URN(Uniform Resource Name,统一资源名称)。这些术语之间的关系如下: - **URL**:URL是一种特殊的URI,用于...
URI(统一资源标识符)和URL(统一资源定位符)是互联网资源定位的基础概念,而URN(统一资源名称)则是一种特殊的URI,用于持久命名资源。本文将深入探讨这些概念及其在Java中的实现。 首先,URI是全球唯一的资源...
Java 8 documentation for class URI, a good reference for recapping the concepts and use cases of URI/URL/URN.
URI(Uniform Resource Identifier)和URL(Uniform Resource Locator)是互联网上资源定位的两种重要概念,它们之间存在着密切的关系,但又有明显的区别。 URI是统一资源标识符,它是一个全局唯一的字符串,用于...
在Web应用中,URI扮演着至关重要的角色,它用于定位网络资源,包括URL(Uniform Resource Locator)和URN(Uniform Resource Name)。URI.js 提供了一套完整的API,使得开发者可以轻松地解析、构建、修改和操作URI。...
在IT行业中,URI(Uniform Resource Identifier)是一种标准的标识资源的方式,它包括URL(Uniform Resource Locator)和URN(Uniform Resource Name)。"VSoft.Uri-master_SimpleUriParser_"这个项目是针对URI解析...
URI是互联网上资源的唯一标识符,包括我们常见的URL(Uniform Resource Locator)和URN(Uniform Resource Name)。这份文档详细阐述了URI的构建块、语法、编码规则以及解析过程,对于理解互联网资源的定位和引用至...
它包含了URL(Uniform Resource Locator)和URN(Uniform Resource Name),是互联网上的资源定位和命名的核心部分。URI schemes则是定义如何解析和访问这些资源的特定协议或方式。本文将深入探讨"uri-schemes-1.x-...
分层URI(Hierarchical Uniform Resource Identifier)是互联网上资源的唯一标识,如URL(Uniform Resource Locator)和URN(Uniform Resource Name)。本资料主要探讨了如何使用JavaScript来处理和解析这些在网络...
1. URI和URL的区别:在理解sabre/uri库之前,首先需要知道URI和URL之间的区别。URI是统一资源标识符,它包括URL(统一资源定位符)和其他类型的资源标识,如URN(统一资源名称)。URL是URI的一个子集,提供了资源的...
URI可以被看作是URL(Uniform Resource Locator)和URN(Uniform Resource Name)的统称,它既可以提供资源的位置(如网页的URL),也可以提供资源的名字(如URN)。在“Quest URIs URI”这个主题中,我们似乎关注的...
5. URL类与URI类的区别: - 虽然URI更通用,但URL提供了额外的功能,如打开连接、读取数据等。 - `java.net.URL`类可以转换为`URI`,但不是所有URI都能转换回URL,因为某些URI可能不适合定位资源。 - `new URL...