`

URI和URL

 
阅读更多
链接:https://www.zhihu.com/question/21950864/answer/66779836
来源:知乎

从JDK1.5开始

java.net包对统一资源定位符

(uniform resource locator URL)

和统一资源标识符

(uniform resource identifier URI)

作了非常明确的区分。


(1)URI是个纯粹的句法结构,用于指定标识Web资源的字符串的各个不同部分。URL是URI的一个特例,它包含了定位Web资源的足够信息。其他URI,比如

mailto:cay@horstman.com

则不属于定位符,因为根据该标识符无法定位任何资源。



URI 是统一资源标识符,而 URL 是统一资源定位符。因此,笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。上面的 mailto、news 和 isbn URI 都是 URN 的示例。

URI 和 URL 概念上的不同反映在此类和 URL 类的不同中。


此类的实例代表由 RFC 2396 定义的语法意义上的一个 URI 引用。URI 可以是绝对的,也可以是相对的。对 URI 字符串按照一般语法进行解析,不考虑它所指定的方案(如果有)不对主机(如果有)执行查找,也不构造依赖于方案的流处理程序。相等性、哈希计算以及比较都严格地根据实例的字符内容进行定义。换句话说,一个 URI 实例和一个支持语法意义上的、依赖于方案的比较、规范化、解析和相对化计算的结构化字符串差不多。


作为对照,URL 类的实例代表了 URL 的语法组成部分以及访问它描述的资源所需的信息。URL 必须是绝对的,即它必须始终指定一个方案。URL 字符串按照其方案进行解析。通常会为 URL 建立一个流处理程序,实际上无法为未提供处理程序的方案创建一个 URL 实例。相等性和哈希计算依赖于方案和主机的 Internet 地址(如果有);没有定义比较。换句话说,URL 是一个结构化字符串,它支持解析的语法运算以及查找主机和打开到指定资源的连接之类的网络 I/O 操作。




在Java类库中,URI类不包含任何访问资源的方法,它唯一的作用就是解析。


相反的是,URL类可以打开一个到达资源的流。


因此URL类只能作用于那些 Java类库知道该如何处理的模式,


例如http:,https:,ftp:,本地文件系统(file:),和Jar文件(jar:)。



URI—Universal Resource Identifier通用资源标志符
Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的
URI一般由三部组成
①访问资源的命名机制
②存放资源的主机名
③资源自身的名称,由路径表示,着重强调于资源。


URL—Uniform Resource Location统一资源定位符
URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。
采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。
URL一般由三部组成
①协议(或称为服务方式)
②存有该资源的主机IP地址(有时也包括端口号)
③主机资源的具体地址。如目录和文件名等




应用:

一 、 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操作。


介绍URL类的两个重要方法

openStream()
打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream。

openConnection()
返回一个 URLConnection 对象,它表示到 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()));
上面的程序通过openStream()方法获取访问URL获取的输入流,从而读取响应内容,ps响应内容是过滤掉响应头了的。

openConnection()方法就可以getOutputStream()以及 getInputStream()
可以更灵活的进行request和response
分享到:
评论

相关推荐

    URI和URL区别 .

    在探讨“URI和URL区别”这一主题时,我们首先需要明确这两个概念的基本定义与功能,进而深入理解它们之间的差异以及在互联网技术中的具体应用。URI(Uniform Resource Identifier,统一资源标识符)和URL(Uniform ...

    URI和URL的区别

    一、URI、URL和URN 二、URI和URL的区别及关系 简而言之,URI是标识某一个资源,而URL用位置来标识一个资源。 一、URI、URL和URN Web上地址的基本形式是URI,它有多种形式:常见的有URL和URN。 URI = Universal ...

    Boost.URL是一个用于操作统一资源标识符(URI)和定位器(URL)的库。.zip

    Boost.URL库是C++编程语言中的一个开源工具,专门设计用于处理和操作统一资源标识符(URI)和统一资源定位器(URL)。这个库提供了一套全面且强大的API,允许开发者高效、安全地进行URL解析、构建、修改以及验证等...

    关于URI和URN,URL和java中对应的类.docx

    URI、URL和URN之间的关系是:URI是顶层概念,包括了URL和URN。URL是URI的一种具体形式,用于提供资源的访问途径,而URN则提供了一个永久性的名字,即使资源的物理位置改变,依然可以通过URN找到资源。 在Java中,...

    关于URI和URN,URL和java中对应的类.pdf

    在Java中,URI和URL被分别封装在`java.net.URI`和`java.net.URL`类中。URI 类是一个抽象的概念,主要用于解析和表示URI,但不涉及网络访问。它支持相对URI,并且更加符合相关规范。而URL类则更偏向于实际的网络操作...

    URI,URL常识

    ### URI与URL的基础概念 #### 一、URI(Uniform ...- **总结**:在日常使用中,人们经常将URL和URI这两个术语互换使用,但在技术上,它们有着明确的区别。理解这些概念对于正确地使用和构建互联网资源至关重要。

    01_01_URI和URL.mp4

    java

    前端开源库-uri-util

    在浏览器和服务器环境中,处理URI是非常常见的需求,比如构建、解析、编码或解码URL,以及进行URL查询参数的操作。uri-util模块提供了一套便捷的API,使得这些任务变得简单易行。 在前端开发中,URI和URL扮演着至关...

    urlly:用于 C 和 JS 后端的 Nim 的 Uri 和 Url 解析。 类似于 [removed] 的 api

    ”) 用于 C/JS 后端的 Nim 的 URL 和 URI 解析。 类似于浏览器的[removed] api。 Nim 的标准库uri模块不解析查询字符串。 而且 Nim 的标准库cgi模块在js模式下不起作用。 该模块适用于任何地方并解析所有内容! ...

    HTTP协议详解以及URL具体访问过程.docx

    在 HTTP 协议中,URI 和 URL 是两个相关但不同的概念。URI 是统一资源标识符,用于标识资源的位置,URI 包含 URL。URI 由三个部分组成:访问资源的命名机制、存放资源的主机名和资源自身的名称。URL 是统一资源定位...

    sabreuri一个功能URIs操纵库

    1. URI和URL的区别:在理解sabre/uri库之前,首先需要知道URI和URL之间的区别。URI是统一资源标识符,它包括URL(统一资源定位符)和其他类型的资源标识,如URN(统一资源名称)。URL是URI的一个子集,提供了资源的...

    URL和URI使用指南

    ### URL和URI使用指南 #### 一、引言 在当今互联网时代,了解如何通过URL(Uniform Resource Locator,统一资源定位符)和URI(Uniform Resource Identifier,统一资源标识符)来获取网络上的数据至关重要。本指南...

    Python网络爬虫介绍 从基础入门到进阶知识学习 含真实案例分析和程序源代码 共62页.pdf

    本资源为 Python 网络爬虫的入门级教程,涵盖了网络爬虫的基本概念、爬虫的定义、网络爬虫的基本操作、URI 和 URL 的概念、浏览网页的过程等知识点。通过本资源的学习,读者可以对 Python 网络爬虫有一个系统的了解...

    (完整word)python-网络爬虫.doc

    3. URI 和 URL 的概念和组成 4. URL 的格式和解析 5. 爬虫处理对象的 URL 资源详解: 1. 网络爬虫的定义:网络爬虫是一个爬行程序,一个抓取网页的程序。爬虫可以通过网页的链接地址来寻找网页,并抓取网页的内容...

    Uri一个URI处理库

    - **创建和解析URI**:Uri库允许通过字符串或数组创建URI实例,并能解析出各个部分,如scheme(协议)、authority(授权部分,包括用户信息、主机和端口)、path(路径)、query(查询字符串)和fragment(片段...

    URI、URL和URN之间的区别与联系

    有两种形式: URL:目前URI的最普遍形式就是无处不在的URL或统一资源定位器。 URN:URL的一种更新形式,统一资源名称(URN, Uniform Resource Name)不依赖于位置,并且有可能减少失效连接的个数。但是其流行还需...

    188.B网上宾馆订房管理系统 外文文献和翻译.doc

    4. **URI和URL**:URI(统一资源标识符)是一个更广泛的术语,包括了URL和URN(统一资源名称)。URL指定了资源的位置,而URN则提供了全局唯一的资源标识,不依赖于资源的物理位置。在实际应用中,URI和URL经常互换...

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

    URI(Uniform Resource Identifier)和URL(Uniform Resource Locator)是互联网上资源定位的两种重要概念。它们虽然在功能上有所重叠,但有着明确的区别。 首先,URI,统一资源标志符,是一个抽象的概念,用于唯一...

    REST URI(URL是其子类)命名规范.zip_子类构造方法

    URL(统一资源定位符)是URI的一个子类,主要用于定位网络资源。 1. **URI中不应包含动词** 在RESTful设计中,URI应该代表资源,而不是操作。动词通常属于HTTP方法(GET、POST、PUT、DELETE等)。例如,一个错误的...

Global site tag (gtag.js) - Google Analytics