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

ok,现在回答文章开头提出的问题,到底是imgUrl好呢,还是imgUri好?显然,如果说imgUri是肯定没问题的,因为即使它实际上是url,那它也是uri的一种。那么用imgUrl有没有问题呢?此时则要看它的可能取值,如果是绝对路径,能够定位的,那么用imgUrl是没问题的,而如果是相对路径,那还是不要用ImgUrl的好。总之,用imgUri是肯定没问题的,而用imgUrl则要视实际情况而定。

第二个,从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。

总结一下:URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,所以,是绝对的,而通常说的relative URL,则是针对另一个absolute URL,本质上还是绝对的。

注:这里的绝对(absolute)是指包含scheme,而相对(relative)则不包含scheme。

URI抽象结构     [scheme:]scheme-specific-part[#fragment]

[scheme:][//authority][path][?query][#fragment]

authority为[user-info@]host[:port]

参考资料:

http://docs.oracle.com/javase/1.5.0/docs/api/java/net/URI.html

http://en.wikipedia.org/wiki/Uniform_Resource_Identifier

http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html

转载于:https://www.cnblogs.com/SeeYouLater/p/6019255.html

URI、URL以及URN的区别相关推荐

  1. URI、URL和URN的区别和联系

    什么是URI.URL.URN? URI(Uniform Resource Identifier ):统一资源标识符.URI类似于资源的 id,一个URI能够标识唯一一份资源,但反之则未必. URL(U ...

  2. JAVA基础 - URI、URL和URN的区别

    什么是URI(统一资源标识符)? "A Uniform Resource Identifier (URI) 是一个紧凑的字符串用来标识抽象或物理资源." 用于标识一个抽象或物理资源 ...

  3. URI RUL和URN的区别(看不懂?)

    URI RUL和URN的区别 翻译 首先返回一下三个缩写的含义 URI 统一资源标识符(Uniform Resource Identifier) URL 统一资源定位(uniform resource ...

  4. URI,URL,URN的区别

    URI: Uniform Resource Identifier URL: Uniform Resource Locator URN: Uniform Resource Name URI是其他两者的超 ...

  5. URI和URL及URN的区别

    对于URL,大家都比较熟悉,其他两个词就比较陌生了.URI.URL和URN是识别.定位和命名互联网上的资源的标准途径.1989年Tim Berners-Lee发明了互联网(World Wide Web ...

  6. URI,URL与URN的区别

    2017-11-13 16:51:49 URI = Universal Resource Identifier 统一资源标志符 URL = Universal Resource Locator 统一资 ...

  7. URI、URL 和 URN 的区别

    URI:Uniform Resource Identifier,统一资源标识符.用来唯一的标识一个资源. 一般由三部分组成:访问资源的命名机制:存放资源的主机名:资源自身的名称(由路径表示,着重强调于 ...

  8. URI、URL、URN的区别和联系

    目录 1 URI:统一资源标识符 2 URL:统一资源定位符 3 URN:统一资源名称 4 URI.URL.URN三者的关系 5 结语 1 URI:统一资源标识符 URI(Uniform Resour ...

  9. URI和URL、URN的区别

    百度百科上是这样定义的. URI:Universal Resource Identifier,通用资源标识符: URL:Uniform Resource Locator,统一资源定位符: URN:Un ...

最新文章

  1. [转载]64位linux安装WPS
  2. 前端将数据转化为弹幕效果的实现方式
  3. Shell中的if判断
  4. 读源码,对开发者重要吗?
  5. Windows下安装MinIO
  6. php站群系统,ThinkPhp内核逐鹿泛目录站群系统 毫秒级加载速度 丰富的内容库搭配(价值8000元)...
  7. 人脸方向学习(十三):Face Tracking-人脸跟踪KCF解读
  8. android平板用office,现在可以在 Android 平板上使用你所喜爱的 Office 应用程序了...
  9. Android Binder机制浅析
  10. OMNeT 例程 Tictoc15 和 Tictoc16 矢量和标量统计详解
  11. smbrun - smbd和外部程序间的接口程序。
  12. Android App性能流畅度测评分析可以用到工具
  13. 2021B站1024程序员节 网络攻防CTF
  14. ac68u、r8500 梅林固件扩展为一个小型 linux 系统
  15. 12月30日goCom社区OSGi Topic大纲和PPT
  16. VUE项目制作大致方法和流程
  17. 悲观锁与乐观锁的实现(详情图解)
  18. 强大的MySQL 官方压测神器,简单、易用
  19. 郑州市养老院解决方案,苏州新导助力养老院行业发展
  20. 零拷贝技术浅浅析【kafka实现百万级吞吐量基础】

热门文章

  1. html页面视频标签,html5基础标签(html5视频标签 html5新标签用法)
  2. 计算机电缆线对成缆系数,计算机电缆绞合系数 - 无图版
  3. html.textboxfor id,How to update the textbox value @Html.TextBoxFor(m = m.MvcGridModel.Rows[j].Id)
  4. 不相交轮换的乘积怎么求_谁能告诉我 轮换的乘积 怎么做?具体题目是
  5. python速成要多久2019-8-28_2019最全Python入门学习路线,不是我吹,绝对是最全
  6. 梦幻西游三维版显示服务器未开启,梦幻西游三维版登录不进去怎么办-梦幻西游三维版登录不进去解决办法介绍_斗蟹游戏网...
  7. html溢出攻击,溢出(漏洞)攻击的实现及防御
  8. mysql substr 中文乱码_刚碰到的MySql乱码的问题
  9. hive udf 分组取top1_Hive的经典面试题
  10. Ubuntu环境下使用gnuplot由数据表绘制曲线图