这两天在写代码的时候,由于涉及到资源的位置,因此,需要在Java Bean中定义一些字段,用来表示资源的位置,比如:imgUrl,logoUri等等。但是,每次定义的时候,心里都很纠结,是该用imgUrl还是imgUri呢?

同样的,另外一个问题:String HttpServletRequest.getRequestURI();和StringBuffer HttpServletRequest.getRequestURL();返回的内容有何不同?为什么会如此?

带着这些问题到网上去搜了下,没发现让自己看了明白的解释,于是,想到了Java类库里有两个对应的类java.net.URI和java.net.URL,终于,在这两个类里的javadoc里找到了答案。

URIs, URLs, and URNs
首先,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则要视实际情况而定。

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
61+28i9kvE5Rr2WTwcuwBg==

集合类框架的常用类比相关推荐

  1. J2SE核心实战开发—— 集合类框架

    文档都是基于 实验楼 线上环境制作的,因此文档叙述和截图均与其有关.使用其他实验环境也没有太大影响,知识点的操作是类似的.该系列的课程是在 实验楼 实习所原创的第一个课程,欢迎大家多提意见. 一.实验 ...

  2. python常用命令汇总-Python爬虫框架Scrapy常用命令总结

    本文实例讲述了Python爬虫框架Scrapy常用命令.分享给大家供大家参考,具体如下: 在Scrapy中,工具命令分为两种,一种为全局命令,一种为项目命令. 全局命令不需要依靠Scrapy项目就可以 ...

  3. TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别

    TF:tensorflow框架中常用函数介绍-tf.Variable()和tf.get_variable()用法及其区别 目录 tensorflow框架 tensorflow.Variable()函数 ...

  4. php常用技术与thinkphp5,thinkPHP5框架路由常用知识点汇总

    本文实例讲述了thinkPHP5框架路由常用知识点.分享给大家供大家参考,具体如下: 一.路由的模式 普通模式(默认pathinfo,不解析路由) 'url_route_on' => false ...

  5. Java集合类框架总结

    一.Collection接口 Collection接口属于java.lang包,是集合类框架的主要接口,List接口.set接口.Queue接口继承了Collection接口,分别是列表.集合和队列. ...

  6. 设计模式_spring框架中常用的8种设计模式

    spring框架中常用到的8种设计模式清单如下: 设计模式 使用地方 备注 工厂模式 BeanFactory ApplicationContext 单例模式 Spring中的Bean 代理模式 Spr ...

  7. Java集合类框架源码分析 之 LinkedList源码解析 【4】

    上一篇介绍了ArrayList的源码分析[点击看文章],既然ArrayList都已经做了介绍,那么作为他同胞兄弟的LinkedList,当然必须也配拥有姓名! Talk is cheap,show m ...

  8. java api 框架_java常用对象API之集合框架

    说到集合框架,其实刚开始学的时候有点自我感觉很简单,自己认为就是集合类中的框架之类的,但是当自己简单把它过了一变后发现懵里懵懂的,什么都没懂,于是自己又认认真真的看了一遍,才弄明白. 说到集合框架就不 ...

  9. Foundation框架中常用类的介绍

    http://blog.csdn.net/mengtnt/article/details/6087536 Foundation框架的架构 cocoa程序编写主要用到2个框架Foundation和App ...

最新文章

  1. C#实现汉字转化为拼音
  2. 剖析Vue原理实现双向绑定MVVM
  3. suse软件管理程序zypper
  4. 【NET CORE微服务一条龙应用】开始篇与目录
  5. Fragment使用LocalBroadcastManager接收广播消息
  6. shell输出没有换行符
  7. android studio不能更新代码,解决Android Studio 和 Android SDK Manager 无法在线更新的问题....
  8. WAMP本地环境升级php版本操作步骤(详细)
  9. ROS笔记(6) ROS通讯机制
  10. 【计算机网络】1.1 计算机网络的基本概念
  11. OCS 2007 R2 标准版部署
  12. 计算机辅助审计笔记,审计笔记2.0 盘点
  13. 师范类大学计算机排名,2018中国师范类大学排行榜,北京师范大学第一
  14. Orcle中Database Control - orcl打开错误或者打不开的解决办法
  15. 开发者论坛一周精粹(第四十八期) ICP经营许可证办理流程
  16. 大专毕业C/C++零基础学编程难吗?多久能就业?
  17. Linux0号进程,1号进程,2号进程
  18. java处理 mysql中json类型
  19. 网易租赁服务器怎么添加组件,《我的世界》租赁服添加MOD教程 租赁服怎么添加小精灵MOD?...
  20. Linux下dcm2niix使用

热门文章

  1. 面试突击:什么是粘包和半包?怎么解决?
  2. tcp业务层粘包和半包理解及处理
  3. Mina学习(4):实现自定义编解码器并解决半包,丢包,粘包问题
  4. 男性健身全攻略 男人4大方法快速塑形
  5. 在南方读研和在北方读研有多大差异?
  6. 突破权限查看人人网特定用户所有相册 加密除外 的算法
  7. SPI在linux3.14.78 FS_S5PC100(Cortex A8)和S3C2440上驱动移植(deep dive)
  8. minikube国内安装之曲线救国
  9. APP开发应注意的几点
  10. 常见的数学建模比赛汇总(参考资料)