定义:
URI(Universial resource identifier)是通用资源标识符
Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的URI一般由三部组成
- 访问资源的命名机制
- 存放资源的主机名
- 资源自身的名称,由路径表示,着重强调于资源。
URL(uniform resource locator)是统一资源定位符。
URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。
采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。
URL一般由三部组成
- 协议(或称为服务方式)
- 存有该资源的主机IP地址(有时也包括端口号)
- 主机资源的具体地址。如目录和文件名等
比较和区别
URI是个纯粹的句法结构,用于指定标识Web资源的字符串的各个不同部分。URL是URI的一个特例,它包含了定位Web资源的足够信息。它的格式是这样的:
[scheme:][//host:port][path][?query][#fragment]
举个例子:
mailto:cay@horstman.com
笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。上面的 mailto、news 和 isbn URI 都是 URN 的示例。
在Java类库中,URI类不包含任何访问资源的方法,它唯一的作用就是解析。相反的是,URL类可以打开一个到达资源的流。因此URL类只能作用于那些 Java类库知道该如何处理的模式,例如http:
,https:
,ftp:
,本地文件系统(file:)
和Jar文件(jar:)
。
应用
URI
比如在JDK中sun公司提供的简易HttpServer实现中
public void handle(final HttpExchange exchange)throws Exception
方法中,根据exchange对象可以拿到访问Http请求的URI对象,ps:
http://127.0.0.1:8080/cmd_helloworld/?name=guowuxin
此时URI uri = exchange.getRequestURI()
;
通过uri可以拿到连接的各部分内容:
uri.getPath() -----> /cmd_helloworld 注意有斜杠
uri.getQuery()-----> name=guowuxin
当然如果是post请求,请求内容在请求body当中
URL
上面说了,URL 是一个结构化字符串,它支持解析的语法运算以及查找主机和打开到指定资源的连接之类的网络 I/O 操作。
重要的,URL不仅仅可以进行语法解析运算,还可以查找主机,并且打开指定资源的连接进行网络IO操作。
方法:
* openStream():打开此URL的连接并返回一个用于从该连接读入的InputStream.
* openConnection():返回一个URL Connection对象,它表示到URL所引用的远程对象的连接。
URL url = new URL("http://www.baidu.com");
InputStream in = url.openStream();
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while(len = in.read(buffer) != -1){
output.write(buffer, 0, len);
}
System.err.println(new String(output.toByteArray()));
reference:
* https://www.zhihu.com/question/21950864/answer/66779836
* http://blog.csdn.net/harvic880925/article/details/44679239