URL和URI的理解(getResource().getPath()获取的路径自动编码)

个人理解,仅供参考,多多指教(URL   URI 表示对应的对象)。

   问题

    

    在获取项目的根目录时,一开始直接用getResource()的方法得到URL的对象,然后去getPath()。在我自己的电脑上测试没什么问题。但是提交到服务器上测试时,通过getPath()获取到的路径却乱码了。百思不得其解。

    后来用getResource()的带的URL对象.toURI()获取到URI对象,再getPath(),得到的路径就是完整的路径了。

   原因

    URL.getPath() 会经过application/x-www- form-urlencoded编码,所以如果你服务器上的路径中有特殊的字符&%或者空格,那么会自动帮你编码。而URI.getPath()不会帮你编码,直接返回对应的路径。

   延伸:

   为什么URL.getPath() 会自动进行编码,而URI不会?这就要谈到URL和URI的区别了。

    (截取百度百科)  

     URL:统一资源定位符 ,是对可以从互联网上得到的资源的位置和访问方法的一种唯一标识,是互联网上标准资源的地址。

        URI:统一资源标识符,是一个用于标识某个唯一互联网资源名称的字符串。

         还有他们一个家人 URN:统一资源名称,标识一个某个唯一互联网资源实体的标识符,但是不能定位到资源的位置。

    从上面可以看出,URI 分为URL和URN两种,URL和URN 都是表示唯一的一个资源,但他们之间最明显的区别就是,是否能定位到表示的资源实体。就像地球上的人本质上分为男人和女人(故意找茬的我打死你。。。)。    

    mailto:cay@horstman.com

    上面的是一个URI,但是他不能定位资源的位置,所以他是一个URN。

    URL 中 L 表示Locator 定位器的意思,他能定位到资源的具体位置。例如:

    https://baike.baidu.com/item file/url/110640.html

    红色部分表示 指定的传输协议,蓝色部分指存放资源的服务器的域名系统 (DNS) 主机名或 IP 地址,黑色部分就是路径(path)表示110640.html文件在服务器上的具体位置,开始URL.getPath()获取到的就是黑色部分。回到问题,为什么URL.getPath()会自动编码。因为URL是一定需要能定位到资源的字符,如果你的路径中包含了特殊字符或者空格,那么肯定是访问(定位)不到代表的资源的。所以JDK会使用application/x-www- form-urlencoded对路径进行编码,已确保你的路径能正常的访问。而URI不会自动编码是因为他包括了URL和URI,所以URI并不代表一定需要定位到资源,所以不会自动编码。


    


  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值