`

04_URI和URL的区别和联系

 
阅读更多

一、URI和URL的区别和联系

二、HttpServletRequest.getRequestURI()和HttpServletRequest.getRequestURL()返回的内容有

      何不同?为什么会如此?

 

一、URI和URL的区别和联系      

      首先,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必须被指定。

 

URI   (uniform resource identifier)

既有相对的又有绝对的

(正是有了相对的所以才会有了,HttpServletRequest.getRequestURI()和HttpServletRequest.getRequestURL() 这两个方法并存,以满足获取绝对路径或相对路径的需求,绝对路径就通过URL来提供因为URI的绝对路径跟URL的绝对路径是相同的,相对路径就有URI来提供,因为这只能由URI提供)

URL (uniform resource locator,一种具体的URI) 只有绝对路径
URN  (uniform resource name,一种具体的URI)  

 

 

二、HttpServletRequest.getRequestURI()和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。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics