URI 和URL分别指什么?

URL和URI的区别

String HttpServletRequest.getRequestURI() 和StringBuffer HttpServletRequest.getRequestURL() 返回的内容有何不同?为什么会如此?

首先,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]

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对象不适用

原文地址:https://www.cnblogs.com/wdyaoyao/p/10480257.html

时间: 2024-09-30 06:26:21

URI 和URL分别指什么?的相关文章

理解URI和URL

1)定义: URI: Uniform Resource Identifier,通用资源标识符 ---是一个用于标识某一互联网资源名称的字符串(by 维基百科) URL:Uniform Resource Locato,统一资源定位符 从关系上来看,URI属于父类,URL属于URI的子类.URL是URI的一个子集.URL一定是属于URI,反之不然二者的区别在于,URI表示请求服务器的路径,定义这么一个资源.而URL同时说明要如何访问这个资源(http://). 2)命名规范: URI一般由三部分组成

URI与URL的区别

(原网址:http://zhidao.baidu.com/question/38764759.html) Web上可用的每种资源 - HTML文档.图像.视频片段.程序等 - 由一个通过通用资源标志符(Universal Resource Identifier, 简称"URI")进行定位. 1.URI一般由三部分组成: 2.访问资源的命名机制. 3.存放资源的主机名. 4.资源自身的名称,由路径表示. 考虑下面的URI,它表示了当前的HTML 4.0规范: http://www.web

URI和URL区别

总结如下: 1.简写:URI (uniform resource identifier)统一资源标志符:URL(uniform resource location )统一资源定位符(或统一资源定位器):URN(uniform resource name )统一资源命名. 2.URI 和 URL 的比较 a.URI是一个相对来说更广泛的概念,URL是URI的一种,是URI命名机制的一个子集,可以说URI是抽象的,而具体要使用URL来定位资源. b.Web上的每一种资源如:图片.文档.视频等,都是由

URI和URL

URI (uniform resource identifier)统一资源标志符: URL(uniform resource location )统一资源定位符(或统一资源定位器): URN(uniform resource name )统一资源命名. 2.URI 和 URL 的比较 a. URI是一个相对来说更广泛的概念,URL是URI的一种,是URI命名机制的一个子集,可以说URI是抽象的,而具体要使用URL来定位资源. b. Web上的每一种资源如:图片.文档.视频等,都是由URI定位的,

URI和URL及URN的区别

对于URL,大家都比较熟悉,其他两个词就比较陌生了.URI.URL和URN是识别.定位和命名互联网上的资源的标准途径.1989年Tim Berners-Lee发明了互联网(World Wide Web).WWW被认为是全球互连的实际的和抽象的资源的集合–它按需求提供信息实体–通过互联网访问.实际的资源的范围从文件到人,抽象的资源包括数据库查询. 因为要通过多样的方式识别资源(人的名字可能相同,然而计算机文件只能通过唯一的路径名称组合访问),所以需要标准的识别WWW资源的途径.为了满足这种需要,T

URI、URL与URN的区别

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

URI和URL的区别(转)

1说明: 这段时间写android的时候用到了URL和URI,有点分不清楚,于是做了一个系统性的学习.在这里将自己的学习笔记粘贴出来,希望对大家有帮助. 1)Java类库里有两个对应的类java.net.URL和java.net.URI,官方的定义分别如下: (URL)A Uniform Resource Locator thatidentifies the location of an Internet resource as specified by RFC 1738.(统一资源定位符用于标

URI,URL,URN

首先,URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源.而URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源.而URN,uniform resource name,统一资源命名,是通过名字来标识资源,比如mailto:[email protected].也就是说,URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则

java URI 与URL问题

File类存在两个看起来很相似的方法toURI()和toURL(),这两个方法都是将文件转换成一个链接,可以网络访问.只是URI和URL的应用范围不同,URI来的更广. 那么为什么要使用toURI()而不是toURL()呢?如果要将文件转换成一个URL的话,这样来得更简单.因为toURL()存在bug. 在File转化成URI的时候,会将链接中的特殊字符如#或!等编码,而toURL()确不会. 如将“C:Documents and Settingstest.xsl”进行转化 toURI()得到的