URI: Uniform Resource Identifier, 统一资源标识符,用来标识网络资源名称的独有字符串。这种标识允许用户对互联网或者本地的资源通过特定的协议进行交互操作。URI由确定的语法或者是相关的协议定义。
URL: Uniform Resource Locator, 统一资源定位符,可以从互联网得到的资源的位置以及访问的方法的一种简单的表示。互联网上的每一个文件都有一个唯一的URL。它是一种具体的URI,URL可以用来标识一个资源,同时还指明了怎样locate这个资源。
URN: Uniform Resource Name,统一资源名称,用以标识持久性Internet资源,URN可以提供一种机制,用于查找和检索定义特定命名空间的架构文件,URL也可以提供类似的功能,但是在这个方面,URN功能更加强大,并且更易于管理,URN可以引用多个URL。另外与URL不同的是URN与地址无关。URN在web主要用来制作下拉菜单,使用URN制作的下拉菜单的易扩展性会得到很大的提高。URN通过名字来标识资源,例如mailto:java-net@java.sun.com,也就是说,URI是以一种抽象的,高层次的概念来定义统一资源标识。而URL和URN则是具体的资源标识的方式,URL和URN都是一种URI。
P2P下载中使用的磁力链接是URN的一种实现,它可以持久化地标识一个BT资源,资源分布式地存储在P2P网络中,不需要中心服务器,用户即可找到并下载它。
在Java中,URI实例可以表示绝对的,也可以表示相对的,只要符合URI的语法规则就行。而URL类则不仅符合语义,还包含了定位资源的信息,所以它不可以是相对的,schema必须被指定。
URI是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的资源来定位确切的信息,因此是绝对的。
这里所说的绝对和相对指的是绝对(absolute) 包含schem,相对(relative)不包含scheme。
参考资料:http://www.cnblogs.com/gaojing/archive/2012/02/04/2413626.html