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,统一资源标识符)A Uniform Resource Identifier that identifies an abstract or physical resource, as specified by RFC 2396.(统一资源标识符用于标示一个抽象或者物理资源)
2)也就是说URI是以一种抽象的,高层次概念定义统一资源标识,而URL则是具体的资源标识的方式。URL是一种URI。
3)URL,URI具体定义方式(来自android官方文档)
URL的格式一般由下列三部分组成:
第一部分是协议(或称为服务方式);
第二部分是存有该资源的主机IP地址(有时也包括端口号);
第三部分是主机资源的具体地址。
URI一般由三部分组成:
访问资源的命名机制。
存放资源的主机名。
资源自身的名称,由路径表示。
4)在Java的URI中,一个URI实例可以代表绝对的,也可以是相对的,只要它符合URI的语法规则。而URL类则不仅符合语义,还包含了定位该资源的信息,因此它不能是相对的,schema(protocol)必须被指定。
2举例:
1) 大家平常用图片的时候。到底是imgUrl好呢,还是imgUri好?显然,如果说imgUrl是肯定没问题的,因为即使它实际上是url,那它也是uri的一种。那么用imgUri
有没有问题呢?此时则要看它的可能取值,如果是绝对路径,能够定位的,那么用imgUri是没问题的,而如果是相对路径,那还是不要用ImgUri的好。总之,用imgUrl是肯定没问题的,而用imgUri则要视实际情况而定。
2)StringHttpServletRequest.getRequestURI();和StringBufferHttpServletRequest.getRequestURL();返回的内容有何不同?为什么会如此?
从HttpServletRequest的javadoc中可以看出,getRequestURI返回一个String,“the part of this request’s URL from theprotocol 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, andserver path, but it does not include query string parameters.”,完整的请求资源路径,不包括querystring。
3) URL示例
文件的URL:用URL表示文件时,服务器方式用file表示,后面要有主机IP地址、文件的存取路径(即目录)和文件名等信息。有时可以省略目录和文件名,但“/”符号不能省略。
例(3.1):file://ftp.linkwan.com/pub/files/foobar.txt
代表存放主机ftp.linkwan.com上的pub/files/目录下的一个文件,文件名是foobar.txt。
例(3.2):file://ftp.linkwan.com/pub
代表主机ftp.linkwan.com上的目录/pub。
例(3.3):file://ftp.linkwan.com/
代表主机ftp.linkwan.com上的根目录。
例(3.4):http://homepage.yesky.com/175/2603675.shtml
HTTP的URL:使用超级文本传输协议HTTP,提供超级文本信息服务的资源。
其计算机域名为homepage.yesky.com。超级文本文件(文件类型为.shtml)是在目录/175下的2603675.shtml。这是天极网的一台计算机。
4) 统一资源定位器(URL)指的是Internet文件在网上的地址。好比一个街道在城市地理上地址。URL使用数字和字母按一定顺序排列以确定一个地址。比如,要是有一个人的地址是:
510665 广州市天河科韵路18号 梁大头
你会想到,梁大头是一个人名,他住在广州市天河科韵路18号,邮政编码是510665。
3:总结
参考了的网站:
http://www.cnblogs.com/gaojing/archive/2012/02/04/2413626.html
http://blog.csdn.net/niuox/article/details/7312843
http://cs.szpt.edu.cn/android/reference/java/net/URI.html (官方)
http://cs.szpt.edu.cn/android/reference/java/net/URL.html (官方)
http://www.cnblogs.com/devinzhang/archive/2012/01/08/2316443.html