`
services
  • 浏览: 78434 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论
阅读更多
url:同一资源定位符
uri:同一资源标志符

url定位客户端连接到服务器所需要的信息,如
http://www.csdn.net
http://tcc.com:8080/servlet/logon?name=zhangsan&addr=tttt
完整构成
<protocol>://<servername>[:port]/<url-path>[?query-string]

uri是url的一部分,没有域名和查询字符串,即域名之后查询字符串之前所有的信息,用于制定资源。

例如,对于请求地址
http://java.sun.com/products/servlet/index.html?id=09

url--->http://java.sun.com/products/servlet/index.html?id=09
uri--->/products/servlet/index.html

URI    (Universal Resource Identifier:统一的资源标识) :它是以某种统一的(标准化的)方式标识资源的简单字符串。Web上可用的每种资源 - HTML文档、图像、视频片段、程序等 - 由一个通过通
用资源标志符(Universal Resource Identifier, 简称"URI")进行定位。

URI一般由三部分组成:

访问资源的命名机制。
存放资源的主机名。
资源自身的名称,由路径表示。
考虑下面的URI,它表示了当前的HTML 4.0规范:

     http://www.webmonkey.com.cn/html/html40/

这个URI是这样的:这是一个可通过HTTP协议访问的资源,位于主
机www.webmonkey.com.cn上,通过路径“/html/html40”访问。在HTML文档中
其它资源包括"mailto"(收发email)和"ftp"(FTP访问)。

这是URI的另一个例子,指向一个用户的邮箱:

<A href="mailto:joe@someplace.com">Joe Cool</A>

注:大多数读者可能熟悉"URL",而不是URI。URL是RUI命名机制的一个子集。

片段标志符
有的URI指向一个资源的内部。 这种URI以"#"结束,并跟着一个anchor标志
符(称为片段标志符)。例如,下面是一个指向section_2的URI:

http://somesite.com/html/top.htm#section_2

相对URI
相对URI 不包含任何命名规范信息。它的路径通常指同一台机器上的资源。相
对URI可能含有相对路径(如,“..”表示上一层路径),还可能包含片段标
志符。

为了说明相对URI,假设我们有一个基本的URI http://www.acme.com/support/intro.htm

下面的链接中使用了相对URI:

     <A href="suppliers.htm">Suppliers</A>

它扩展成完全的URI就是 "http://www.acme.com/support/suppliers.htm",
下面是一个图像的相对URI:

     <IMG src="../icons/logo.gif" alt="logo">

它扩展成完全的URI就是 "http://www.acme.com/icons/logo.gif"。

在HTML中,URI被用来:

链接到另一个文档或资源(参看A和LINK元素)。
链接到一个外部样式表或脚本(参看LINK和SCRIPT元素)。
在页内包含图像、对象或applet(参看IMAG、OBJECT、APPLET和INPUT
元素)。
建立图像映射(参看MAP和AREA元素)。
提交一个表单(参看FORM)。
建立一个框架文档(参看FRAME和IFRAME元素)。
引用一个外部参考(参看Q、BLOCKQUOTE, INS和DEL元素)。
指向一个描述文档的metadata(参看HEAD元素)。


URL(Uniform Resoure Locator:统一资源定位器)通俗地说,URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。

◇ URL的格式

URL的格式由下列三部分组成:

第一部分是协议(或称为服务方式);
第二部分是存有该资源的主机IP地址(有时也包括端口号);
第三部分是主机资源的具体地址。,如目录和文件名等。
第一部分和第二部分之间用“://”符号隔开,第二部分和第三部分用“/”符号隔开。第一部分和第二部分是不可缺少的,第三部分有时可以省略。

◇ URL示例

文件的URL:
用URL表示文件时,服务器方式用file表示,后面要有主机IP地址、文件的存取路径(即目录)和文件名等信息。有时可以省略目录和文件名,但“/”符号不能省略。
例一:file://ftp.yoyodyne.com/pub/files/foobar.txt
代表存放主机ftp.yoyodyne.com上的pub/files/目录下的一个文件,文件名是foobar.txt。
例二:file://ftp.yoyodyne.com/pub
代表主机ftp.yoyodyne.com上的目录/pub。
例三:file://ftp.yoyodyne.com/
代表主机ftp.yoyodyne.com上的根目录。

Gopher的URL:
Gopher服务器有可能使用特殊的端口,在这种情况下,主机IP地址与端口之间要用“:隔开。
例一:gopher://gopher.yoyodyne.com/
表示主机gopher.yoyodyne.com上的gopher服务器。
例二:gopher://gopher.banzai.edu:1234
表示主机gopher.banzai.edu上的gopher服务器,在端口1234上。

网络新闻的URL:
利用URL表示网络新闻组时,如果是usenet的话只要指定出新闻组的名字即可。
例如:news:rec.gardening
表示usenet上的rec.gardening新闻组(园艺)。

HTTP的 URL:
使用超级文本传输协议HTTP,提供超级文本信息服务的资源。

URN (Uniform Resource Name, 统一资源名称) : 也用来标识Internet上的资源,但是它们通过使用一个独立于位置的名称来实现。

三者区别:

体系中的URI、URL和URN是彼此关联的。URI的范畴位于体系的顶层,URL和URN的范畴位于体系的底层。这种排列显示URL和URN都是URI的子范畴

URI不能定位或读取/写入资源。这是统一的资源定位器(URL)的任务。URL是一种URI,但是它的大纲组件是已知的网络协议(简称协议),并且它把URI组件与某种协议处理程序(一种资源定位器和根据协议建立的约束规则与资源通讯的读/写机制)。

  
URI一般不能为资源提供持久不便的名称。这是统一的资源命名(URN)的任务。URN也是一种URI,但是全球唯一的、持久不便的,即使资源不在存在或不再使用。

URI是一个更广泛的概念,如URL,URN都是一种URI,     可以说URI是抽象的,而具体使用URL,URN来定位。

URI是用来标识Internet资源的字符串。 URI严格的与Web上一个对象的Internet地址等价。

URI,URN以及URL具有相似的目标,因此可以互用。 URI最抽象最概括;因此,它们通常用于技术规范之中。例如URI的语法定义可以作为URN与URL语法定义的基础。 URN最为通用,但是它们依赖命名来查找服务,因此依赖于并非总是可以用的额外的服务。URL最为常用,并且是HTTP与Web软件的基础。

JAVA中的URI和URL:

URL和URI都属于JAVA.NET下面的一个类。URI是URL的一个抽象,它不仅包括了统一资源定位符(URL),还包括了统一资源名(URN).大多数实际应用中使用的URI都是URL,但是许多规范和标准像XML都是用URI来定义的.在java1.4和更新的版本中, URI被java.net.URI 类所表示.这个类与java.net.URL 相比有如下3点重要的区别:
·          URI 类只关心资源的标识和对URI的解析.它没有方法来检索它的URI所标识的资源。
·          URI 类与URL 类相比,它更能适应相关的规范。
·          一个URI 对象能表示一个相对URI 。URL 类在存放之前,就已经对所有的URI进行了“绝对化”的处理。

简而言之,一个URL 对象就是网络应用层协议进行网络检索的一个代理,而一个URI 对象就只纯粹地做string的解析和操作的工作。URI 类没有进行网络检索的能力。URL 类有一些进行string解析的方法。比如getFile( ) 和 getRef( ) 方法,但很多都是蹩脚的方法,总是不完全像有关的规范上所说的那样好用。假如你现在用的是java1.4版本或更新的版本,这时你就可以做出选择,如果你想下载一个URL指示的内容时,你应该使用 URL类;如果你想使用URI类来进行标识的工作而不是用来检索的时候,你应该用URI类。例如,去标识一个XML namespace 的URI。在一些情况下,当你同时需要实现这两种功能时,你可以用方法toURL( ) 把一个URI 转换成一个 URL 。在java1.5中,你还能用类URL 中的方法toURI( )    把一个URL 转换成一个URI 。


JAVA中构造一个URI:

  URI 从字符串构建。与 URL 类不同,URI 类不依赖于底层协议处理器。只要是 URI 语法上正确,Java 就不需要为了创建用于表示的 URI 对象而理解其协议。这样,与 URL 类不同,URI 类可以用于新的试验性的URI 模式。

  public URI(String uri) throws URISyntaxException

  这是基本的构造函数,根据任何满足条件的字符串创建一个新的 URI 对象。例如:

  URI voice = new URI("tel:+1-800-9988-9938");
  URI web = new URI("http://www.xml.com/pub/a/2003/09/17/stax.html#id=_hbc");
  URI book = new URI("urn:isbn:1-565-92870-9");

  如果字符串参数不遵循URI 语法( 例如,如果 URI 以冒号开头) 此构造函数将抛出 URISyntaxException 异常。这是一个受查异常,所以需要捕获此异常,或者在调用构造函数的方法中声明并抛出该异常。但是,有一条语法规则不会检查。与 URI 规范不同的是,URI 中使用的字符不限于 ASCII。它可以包括其他 Unicode 字符,如 é。在语法上 URI 没有多少限制,特别是,如果不再需要对非 ASCII 字符编码,并且允许相对 URI 的话,那就真没有什么限制了。几乎所有字符串都可以解释为 URI。

  public URI(String scheme, String schemeSpecificPart, String fragment)   throwsURISyntaxException

  这个构造函数主要用于非层次 URI。模式(scheme)是 URI 的协议,如 http、urn、tel 等等。它必须由ASCII 字母、数字及三个标点字符 +、- 和 . 组成。模式必须以字母开头。若此参数为 null,则省略模式,这样会创建一个相对 URI。例如:

  URI absolute = new URI("http", "//www.ibiblio.org" , null);
  URI relative = new URI(null, "/javafaq/index.shtml", "today");

  模式特有的部分取决于URI 模式的语法;对于 http URI 是一种情况,对于 mailto URI 是另一种情况,对于 tel URI 又是其他情况。因为 URI 类会用百分号转义字符来对无效字符编码,实际上这部分不会有任何语法错误。

  最后,第三个参数包含一个片段标识符(如果存在的话)。再次说明,片段标识符中禁止的字符会被自动转义。为此参数传递 null 就会忽略片段标识符。

  public URI(String scheme, String host, String path, String fragment)
  throws URISyntaxException

  这个构造函数用于层次 URI,如 http 和 ftp URL。主机和路径一起(用/ 分隔)组成 URI 的模式特有部分

  例如:

  URI today= new URI("http", "www.ibiblio.org", "/javafaq/index.html", "today");

  将生成 URI http://www.ibiblio.org/javafaq/index.html#today。如果此构造函数无法根据提供的各部分形成有效的层次 URI(例如,如果存在模式,所以 URI 必须为绝对 URI,但路径没有以 / 开头),那么它将抛出 URISyntaxException 异常。

  public URI(String scheme, String authority, String path, String query,String fragment)   throws URISyntaxException

  这个构造函数与前一个基本相同,只是添加了一个查询字符串部分。例如:

  URI today= new URI("http", "www.ibiblio.org", "/javafaq/index.html",
  "referrer=cnet&date=2004-08-23", "today");

  通常,任何不可转义的语法错误都会导致抛出 URISyntaxException 异常,所有参数都可以传递 null 来忽略这一部分。

  public URI(String scheme, String userInfo, String host, int port, String
  path, String query, String fragment) throws URISyntaxException

  这是前面两个构造函数所调用的主要 URI 构造函数,它有层次性。此方法将授权机构分解为用户信息、主机和端口各部分,每个部分都有自己的语法规则。例如:

  URI styles = new URI("ftp", "anonymous:elharo@metalab.unc.edu","ftp.oreilly.com", 21, "/pub/stylesheet", null, null);

  但是,生成的 URI 仍然必须遵循 URI 的所有通用规则,再次说明,任何参数都可以传入 null,以忽略结果中的这一部分。

  public static URI create(String uri)

  这不是构造函数,而是一个静态工厂方法。与构造函数不同,它不抛出 URISyntax-Exception 异常。如果你确定你的 URI 是有效的,不违反任何规则,就可以使用这个方法。例如,下面的调用将创建使用电子邮件地址作为口令进行匿名 FTP 访问的 URI:

  URI styles =   URI.create("ftp://anonymous:elharo%40metalab.unc.edu@ftp.oreilly.com:21/pub/stylesheet");

  如果此 URI 证明是不正确的,这个方法会抛出一个 IllegalArgumentException 异常。这是运行时异常,所以不必显式声明或捕获它。
分享到:
评论
1 楼 duanyong 2008-12-11  
有用,但是没有看明白

留着。

相关推荐

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

    ...

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

    ...

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

    其中,URL,URN是URI的子集。 Web上地址的基本形式是URI,它代表统一资源标识符。有两种形式: URL:目前URI的最普遍形式就是无处不在的URL或统一资源定位器。 URN:URL的一种更新形式,统一资源名称(URN, Uniform ...

    URI和URL的区别

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

    Java网络编程之URI、UR

    URI、URL和URN是识别、定位和命名互联网上的资源的标准途径。本文分析了URI、URL和URN和Java API的URI和URL类

    URI (Java Platform SE 8 )

    Java 8 documentation for class URI, a good reference for recapping the concepts and use cases of URI/URL/URN.

    面向资源的架构:REST的另一面.doc

    讨论了REST架构,SOAP与WS-*,语义网,URL作为ID,URI以及URN,自由形式的,逻辑连接的延迟绑定系统,HATEOAS以及语义网带来的影响。

    JavaWeb编程技术参考答案

     URI是URL和URN的超集。  3. 答:①是URL,①和②都是URI,③是URN  4. 答:动态Web文档技术包括服务器端动态文档技术和客户端动态文档技术,前者包括CGI技术、服务器扩展技术和HTML页面中嵌入脚本技术。其中HTML...

    provenance-log-specifications:真实数据源日志格式,URN和URL的规范

    该项目管理真实数据源日志及其相关的URN,URL和协议的一组规范。 它是通过开发的来指定的,该是受和启发。 这些标准从 , , 和先前工作中获得了很多启发。 这是多年学习和研究的高潮,由于创建和发展了自主权身份...

    java获取路径的各种方法

    另外关于URI,URL,URN等内容,请参考RFC相关文档标准。RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax,(http://www.ietf.org/rfc/rfc2396.txt)2.关于JSP/Servlet中的相对路径和绝对路径。2.1服务器...

    leetcode分类--:——

    URI分为URL和URN,主要使用URL,URN还处于实验阶段 URL分为三部分: 第一部分为方案,说明了访问资源所使用的协议类型。HTTP协议 第二部分给出了服务器的因特网地址 其余部分指定了web服务器上的某个资源 9月29日 ...

    什么是磁力链接?如何用Python获取磁力种子?

    磁力链接,也被称为Magnet URI scheme,是一种在对等网络中进行信息检索和下载文档的电脑程序。这种链接机制与基于“位置”连接的统一资源定位符(URL)是不同的,因为磁力链接是基于元数据进行的。 磁力链接是由一...

    磁力链的基本介绍.doc

    与基于位置的统一资源定位符(URL)不同,磁力链是基于文件内容的元数据,属于统一资源名称(URN)。这意味着磁力链不是基于文档的IP地址或定位符,而是在分布式数据库中,通过散列函数值来识别、搜索并下载文档。 ...

    高级java笔试题-awesome-http:HTTP、HTTP缓存、CORS、HTTPS、HTTP/2、Fiddler、WireShark、

    URI的最常见的形式是(URL),经常指定为非正式的网址。更罕见的用法是(URN),其目的是通过提供一种途径。用于在特定的资源的标识,以补充网址。—— 维基百科 URI 文法 URI文法由名(例如“”,“”,“”或...

    trakt.tv:用于Node.js的Trakt.tv API包装器

    trakt.tv 用于Node.js的Trakt.tv API包装器,具有:...let options = { client_id : &lt; the&gt; , client_secret: &lt; the&gt; , redirect_uri: null, // defaults to 'urn:ietf:wg:oauth:2.0:oob' api_url: null, // default

    HTML开发王

    7.2.3 区分uri、url和urn 7.2.4 区分本地链接和服务器链接 7.3 使用a元素定义链接 7.3.1 定义链接的目标uri(href属性) 7.3.2 定义链接的目标窗口(target属性) 7.3.3 定义链接的提示信息(title属性) 7.3.4 国际化和...

Global site tag (gtag.js) - Google Analytics