URL 和 URI 区别

本文我们讨论URL 和 URI 的主要区别,并通过示例说明这些差异。

URL 和 URI

直接差异来自其定义:

  • Uniform Resource Identifier (URI) − 对任何抽象或物理资源进行完整标识的字符序列。 Uniform
  • Resource Locator (URL) − 除了标识资源可用的位置之外,URI的一个子集描述了访问该资源的主要机制。

现在我们可以得出结论:每个URL都是一个URI,后面我们会看到情况并非如此。

语法

所有URI,不管其是否为URL,需遵循形式:

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

每部分描述如下:

  • scheme − 对于 URL, 是访问资源的协议名称;对其他URI,是分配标识符的规范的名称
  • authority − 可选的组成用户授权信息部分,主机及端口(可选)
  • path − 用于在scheme和authority内标识资源
  • query − 与路径一起的附加数据用于标识资源。对于url是查询字符串
  • fragment − 资源特定部分的可选标识符

为了方便地识别特定的URI是否是URL,我们可以检查它的scheme。每个URL都必须从以下scheme开始:ftp、http、https、gopher、mailto、news、nntp、telnet、wais、file或prospero。如果不是以此开头,则不是URL。

现在我们已经了解了语法,让我们看一些示例。下面是uri列表,其中只有前三个是url:

    ftp://ftp.is.co.za/rfc/rfc1808.txthttps://tools.ietf.org/html/rfc3986mailto:john@doe.comtel:+1-816-555-1212urn:oasis:names:docbook:dtd:xml:4.1urn:isbn:1234567890

URL 和 URI的java api区别

本节我们通过示例演示URL 和 URI的java api区别。

实例化

创建URL 和 URI实例很类似,两个类都提供了几个构造函数,接收大部分其组件,仅URI有接收全部组件的构造函数语法:

@Test
public void whenCreatingURIs_thenSameInfo() throws Exception {URI firstURI = new URI("somescheme://theuser:thepassword@someauthority:80"+ "/some/path?thequery#somefragment");URI secondURI = new URI("somescheme", "theuser:thepassword", "someuthority", 80,"/some/path", "thequery", "somefragment");assertEquals(firstURI.getScheme(), secondURI.getScheme());assertEquals(firstURI.getPath(), secondURI.getPath());
}
@Test
public void whenCreatingURLs_thenSameInfo() throws Exception {URL firstURL = new URL("http://theuser:thepassword@somehost:80"+ "/path/to/file?thequery#somefragment");URL secondURL = new URL("http", "somehost", 80, "/path/to/file");assertEquals(firstURL.getHost(), secondURL.getHost());assertEquals(firstURL.getPath(), secondURL.getPath());
}

URI类提供了工具方法,用于创建新的实例,无需检查异常:

@Test
public void whenCreatingURI_thenCorrect() {URI uri = URI.create("urn:isbn:1234567890");assertNotNull(uri);
}

URL不提供这样方法。由于URL必须从前面提到的一个scheme开始,尝试用不同的scheme创建对象将导致异常:

@Test(expected = MalformedURLException.class)
public void whenCreatingURLs_thenException() throws Exception {URL theURL = new URL("otherprotocol://somehost/path/to/file");assertNotNull(theURL);
}

两个类都提供了其他的构造函数,读者可以查看相应文档。

URI 和 URL 实例间转换

URI 和 URL 实例间转换很简单直接:

@Test
public void givenObjects_whenConverting_thenCorrect()throws MalformedURLException, URISyntaxException {String aURIString = "http://somehost:80/path?thequery";URI uri = new URI(aURIString);URL url = new URL(aURIString);URL toURL = uri.toURL();URI toURI = url.toURI();assertNotNull(url);assertNotNull(uri);assertEquals(toURL.toString(), toURI.toString());
}

然而,尝试转换非URL会抛出异常:

@Test(expected = MalformedURLException.class)
public void givenURI_whenConvertingToURL_thenException()throws MalformedURLException, URISyntaxException {URI uri = new URI("somescheme://someauthority/path?thequery");URL url = uri.toURL();assertNotNull(url);
}

打开远程连接

因为URL是有效的远程资源引用,java提供方法打开远程资源连接并获取其内容:

    @Testpublic void testOpenUrl() throws Exception {URL url = new URL("http://www.baidu.com");String contents = IOUtils.toString(url.openStream(),"utf-8");assertTrue(contents.contains("<!DOCTYPE html>"));}

总结

我们介绍了一些示例来说明Java中URI和URL之间的区别。分别说明了创建对象实例和转换象的差异。我们还展示了URL具有打开指向资源的远程连接的方法。

URL 和 URI 区别相关推荐

  1. 转!!URL和URI区别

    2019独角兽企业重金招聘Python工程师标准>>> URI,URL,URN 从上面的那幅图可以看出来,一共有三个不同的概念URI,URL,URN.这讨论这样的问题时,最好的方法就 ...

  2. URL和URI 的区别

    对于很多刚入门web开发的程序员新人,相信都有过对URL和URI 区分困扰的时候,似乎两者是一体的.对于两者的区别,我当时也是处于糊里糊涂的状态.下面,来简明说明下区分两者的要点,扫清对他们的困扰. ...

  3. URL和URI的区别 【转】

    2019独角兽企业重金招聘Python工程师标准>>> URL和URI的区别 [转] 初学http协议,就被这两个相似的术语搞蒙了,查了很多资料,总算搞清楚了.(找资料还是英文啊,靠 ...

  4. URI是什么意思?URI和URL有什么区别?

    URI是什么意思?URI和URL有什么区别? 详解! HTTP = Hyper Text Transfer Protocol URI = Universal Resource Identifier U ...

  5. 一招明白URL和URI的区别

    URL和URI的区别(示例): URL[统一资源定位器]: http://localhost:8080/api/account/queryAccountInfo URI[统一资源定位符]: /api/ ...

  6. 【转】URL和URI的区别

    [转]URL和URI的区别 译者:华科小涛:http://www.cnblogs.com/hust-ghtao/: 初学http协议,就被这两个相似的术语搞蒙了,查了很多资料,总算搞清楚了.(找资料还 ...

  7. HTTP协议中URI和URL有什么区别

    目录 1. `URL` 是什么 2. `URI` 是什么 3. `URI` 和 `URL` 之间的区别 1. URL 是什么 URL 即 Universal Resource Locator :称为 ...

  8. 通熟理解urL和urI的区别

    转载自:https://blog.csdn.net/simplebam/article/details/72644094 关于URL和URI的区别,个人见解. 初学java,最近被一个概念搞得头晕脑胀 ...

  9. 你知道URL、URI和URN三者之间的区别吗?

    这是一个经典的技术争论,许多人都会自问:URL.URI,很可能还有URN,它们之间的区别是什么.虽然,现在我们简单地把 URN 和 URL 都看做 URI,但严格来说URI可以进一步划分为URL.UR ...

  10. 解析URI与URL之间的区别与联系

    URI就是一种资源定位机制,它是比较笼统地定位了资源,并不局限于客户端和服务器,而URL就定位了网上的一切资源,只要是网上的资源,都有唯一的URL 今天在看STRUTS配置的时候,发现一个问题,就是在 ...

最新文章

  1. centos7+ansible自动化工具使用
  2. 王思聪语录 - CV版
  3. scrum工具四款可参考
  4. C++ 把输出结果写入到文件中
  5. orcale 日期转字符串 去掉0_C# 基础知识系列- 13 常见类库介绍(二)日期时间类...
  6. elasticsearch创建mysql索引_ElasticSearch快速使用,基本索引创建-增加type-mapping-插入数据...
  7. python网课一般多少钱-排名前十的python零基础编程在线网课一对一费用多少钱
  8. ehlib 用法记录
  9. JavaScript学习笔记——underscore操作对象的方法
  10. vim将修改内容复制多次
  11. linux下面升级 Python版本并修改yum属性信息
  12. iPhone 12顶配版延期到10月:刘海仍在 后置3摄+雷达
  13. mysql——数据库事务(C#代码)
  14. centos安装GNOME打开emacs
  15. Ansible详解(十五)——Ansible Role实战
  16. php获取汉字拼音首字母的方法
  17. Stata:回归结果中不报告行业虚拟变量的系数
  18. magicbook大学计算机系,大学开学选择哪款笔记本? Redmibook 14全面对比荣耀Magicbook...
  19. unity 引用 移动mm 支付sdk
  20. 数据库设计4-概念结构设计

热门文章

  1. 莫烦 python教程学习笔记————搭建自己的神经网络
  2. python通信系统仿真_Python与V-REP联合仿真
  3. 工资纳税系统c语言编程加注释,基于C语言的个人所得税计税系统
  4. 方正圆劲 沉雄厚重——张铜彦隶书管窥
  5. 计算机专业英语词汇缩写,计算机专业英语词汇中英文对照其他缩写,外语网
  6. Python数学问题2:求100以内素数之和
  7. [UEFI启动教程]移动硬盘安装U盘装机助理(双模式启动)
  8. 微信小程序 生成二维码
  9. 你手机里装过最牛的软件是什么,精选15款分享,有一个你没用过
  10. PLSQL导出表结构和表数据