刚开始学Java不太理解URL和URI的内容,在网上查阅资料后这里贴贴整理一些大佬的总结
URL可以唯一地标识一个资源在 Internet 上的位置。
URL类是 Java 程序在网络上定位和获取数据的最简单的方法。URL除了标识一个资源,还会为资源提供一个特定的网络位置,客户端可以用来获取这个资源的一个表示。而URI,只能告诉你一个资源是什么,但是无法告诉你它在那里,以及如何得到这个资源。
URL语法为:protocol://userInfo@host:port/path?query#fragment
统一资源标识符采用特定语法标识一个资源的字符串。资源是由URI标识的内容,URI是标识一个资源的字符串。
URI的语法由一个模式和一个模式特定组成部分组成,用冒号分隔。如
模式:模式特定部分
模式包括:data,file,ftp,http,mailto,magnet,telnet,urn
模式特定部分无特定语法,很多采用层次结构形式如://authority/path?query
URI是对URL的抽象。java.net.URI与java.net.URL类的区别:
URI类完全有关于资源的标识和URI的解析,没有提供方法来获取URI所标识资源的表示
相比URL类,URI类与相关的规范更一致
URI对象可以表示相对URI,URL类在存储URI之前会将其绝对化
一句话,URL对象是对应网络获取的应用层协议的一个表示,而URI对象纯粹用于解析和处理字符串。
uri是url的父级,url是uri的子级。
可能有人就奇怪了,咦?明明是url包含了uri为啥uri反而是父级?
请注意,我这里用的是级别来描述,而不是包含。
我没有说url是uri的一部分,而是说是他的子级。
想要理解这个概念,最好的说明就是java的继承关系。url继承了uri。这样来看是不是瞬间就明白了。
因为url继承了所有uri的内容,所以它比uri更加详细,但是uri是它的父级。
url一般是一个完整的链接,我们可以直接通过这个链接(url)访问到一个网站,或者把这个url复制到浏览器访问网站。
使用URL时我们就是一个直接用户的角色,直接访问就完事了。
uri并不是一个直接访问的链接,而是相对地址(当然如果相对于浏览器那么uri等同于url了)。这种概念更多的是用于编程中,因为我们没必要每次编程都用绝对url来获取一些页面,这样还需要进行分割“http://xx/xxx”前面那一串,所以编程的时候直接request.getRequestURI就行了,当然如果是重定向的话,就用URL。
本文摘抄自:
uri和url的区别与联系(一看就理解)
URL和URI