一、区别与联系
(1)、基本概念:
计算机文件只能通过唯一的路径名称组合访问,所以需要标准的识别WWW资源的途径。为了满足这种需要,引入了标准的识别、定位和命名的途径:URI、URL和URN。
- URI:Uniform Resource Identifier,统一资源标识符;
- URL:Uniform Resource Locator,统一资源定位符;
- URN:Uniform Resource Name,统一资源名称。
在这个体系中的URI、URL和URN是彼此关联的。URI的范畴位于体系的顶层,URL和URN的范畴位于体系的底层。这种排列显示URL和URN都是URI的子范畴。
(2)、特点:
URI (Identifier) 只让你可以"区别"资源
URL (Locator) 还让你可以"找到"资源 (所以URL比一般的URI更"強", 是URI的子集)
举个例子:
比如人的身份证号是 (非Locator的) Identifier: 不同身份证号一定是不同人, 但是用身份证号本身是找不到人的。这个人的住址或座标才是Locator。
总结一下:URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,所以,是绝对的,而通常说的relative URL,则是针对另一个absolute URL,本质上还是绝对的
二、问题扩展
String HttpServletRequest.getRequestURI();和StringBuffer HttpServletRequest.getRequestURL();返回的内容有何不同?
答:
从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
三、延伸
==》[scheme:][//host:port][path][?query][#fragment]
例如: http://www.java2s.com:8080/yourpath/fileName.htm?stove=10&path=32&id=4#harvic
- getScheme() :获取Uri中的scheme字符串部分,在这里即,http
- getSchemeSpecificPart():获取Uri中的scheme-specific-part:部分,这里是://www.java2s.com:8080/yourpath/fileName.htm?
- getFragment():获取Uri中的Fragment部分,即harvic
- getAuthority():获取Uri中Authority部分,即www.java2s.com:8080
- getPath():获取Uri中path部分,即/yourpath/fileName.htm
- getQuery():获取Uri中的query部分,即stove=10&path=32&id=4
- getHost():获取Authority中的Host字符串,即www.java2s.com
- getPost():获取Authority中的Port字符串,即8080
- List< String> getPathSegments():上面我们的getPath()是把path部分整个获取下来:/yourpath/fileName.htm,getPathSegments()的作用就是依次提取出Path的各个部分的字符串,以字符串数组的形式输出。
- getQueryParameter(String key):在上面我们通过getQuery()获取整个query字段:stove=10&path=32&id=4,getQueryParameter(String key)作用就是通过传进去path中某个Key的字符串,返回他对应的值
参考链接:
https://www.zhihu.com/question/19557151
http://www.cnblogs.com/gaojing/archive/2012/02/04/2413626.html
http://blog.csdn.net/harvic880925/article/details/44679239