`
jiangwenfeng762
  • 浏览: 288193 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

理解URI

阅读更多

通过一段代码来理解URI的构成:

 

 

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.URI;
import java.net.URISyntaxException;

public class UriTest {
	
	static void outputGetMethod(Class<? extends Object> c,Object obj){
		String get = "get";
		for(Method m:c.getDeclaredMethods()){
			if(m.getName().startsWith(get)){
				try {
					System.out.println(m.getName()+":"+m.invoke(obj, (Object[])null));
				} catch (IllegalArgumentException e) {
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					e.printStackTrace();
				} catch (InvocationTargetException e) {
					e.printStackTrace();
				}
			}
		}
	}

	/**
	 * @param args
	 * @throws URISyntaxException 
	 */
	public static void main(String[] args) throws URISyntaxException {
		URI uri = new URI("ftp://george@x.com:90/public/notes?text=shakespeare#hamlet");
		UriTest.outputGetMethod(URI.class, uri);
	}
}

 

输出结果:


getPath:/public/notes

getScheme:ftp

getAuthority:george@x.com:90

getFragment:hamlet

getQuery:text=shakespeare

getHost:x.com

getUserInfo:george

getPort:90

getRawSchemeSpecificPart://george@x.com:90/public/notes?text=shakespeare

getSchemeSpecificPart://george@x.com:90/public/notes?text=shakespeare

getRawAuthority:george@x.com:90

getRawUserInfo:george

getRawPath:/public/notes

getRawQuery:text=shakespeare

getRawFragment:hamlet


URI分为绝对URI和相对URI。
URI的构成语法如下:
[scheme:] scheme-specific-part

scheme:命名URI的名字空间的标识符,其中绝对URI scheme是必选的,而相对URI scheme可以没有。

scheme-specific-part的构成如下:
[//authority] [path] [?query] [#fragment]

authority:可选的,表示该URI的命名机构。如果URI中有authority,那么它一定是以一对正斜杠开始的,并且它以后面的正斜杠、问号或没有其它符号结束。authority可以是基于服务器的也可以是基于注册的,基于服务器的授权机构组件的语法如下:
[userinfo@] host [:port]
基于服务器的授权机构组件可以随意的以用户信息(例如用户名)开始,后面跟着一个@符号,紧接着是主机的名称,以及冒号和端口号。例如jeff@x.com:90就是一个基于服务器的授权机构组件,其中jeff包含了用户信息,x.com包含了主机,90包含了端口。

path:可选的,根据授权机构组件(如果提供了)或大纲(如果没有授权机构组件)识别资源的定位(或位置)。路径(path)可以分成一系列的路径片断(path segment),每个路径片断使用正斜杠与其它的路径片断隔开。如果路径的第一个路径片断以一个正斜杠开始,该路径就被认为是绝对的。否则路径就被认为是相对的。例如,/a/b/c由三个路径片断--a、b和c组成了一个路径,此外,这个路径是绝对的,因为第一个路径片断(a)的前缀是正斜杠。

query:可选的,识别要传递给某种资源的数据。这种资源使用该数据获取或生成其它的传递回调用者的数据。例如,http://www.somesite.net/a?x=y, x=y就是一个查询(query),在这个查询中,x=y是传递给某种资源的数据--x是某种实体的名称,y是该实体的值。

fragment:可选的,尽管该组件作为URI的一部分出现,但不是绝对的。当使用URI进行某种检索操作时,后面执行操作的软件使用fragment聚焦于软件感兴趣的资源部分(在该软件成功检索到资源的数据后)。

测试程序中用到的URI:

  ftp://george@x.com:90/public/notes?text=shakespeare#hamlet

  这个URI把ftp识别为大纲,把george@x.com:90识别为基于服务器的授权机构(其中george是用户信息,x.com是主机,90是端口),把/public/notes识别为路径,把text=shakespeare识别为查询,把hamlet识别为片断。本质上它是一个叫做george的用户希望通过/public/notes路径在服务器x.com的90端口上检索shakespeare文本的hamlet信息。在shakespeare成功的返回到该程序后,程序定位hamlet段并把它呈献给该用户。

通过以上的说明,对于程序的输出就比较好理解了。


分享到:
评论

相关推荐

    博客《Uri详解之——Uri结构与代码提取》对应源码

    这个博客《Uri详解之——Uri结构与代码提取》的源码提供了深入理解Uri类的实例和实践,有助于开发者更好地理解和操作Uri。下面将详细探讨Uri的相关知识点。 1. **Uri基本概念**: Uri,全称Uniform Resource ...

    浅析什么是URI

    为了更好地理解URI是如何工作的,我们可以通过几个实际的例子来加以说明: - 如果需要访问联系人ID为10的记录,则URI可能是`/contact/10`。 - 如果需要获取联系人ID为10的名字,则URI可以是`/contact/10/name`。 - ...

    WPF之Uri加载图片

    首先,让我们理解URI的基本结构。在WPF中,图像资源的URI通常以`pack://`开头,这代表了“打包”协议,它是专为WPF设计的。接着是“授权”部分,这里我们主要关注两种类型: 1. `application:///`:用于访问在编译...

    Delphi-XE5-开发 Android URI简介

    在 Delphi-XE5 开发 Android 应用时,理解 URI(Uniform Resource Identifier)的基本概念及其作用至关重要。URI 是一种用于标识某一资源的标准格式。在 Android 平台上,它主要用于定位应用中的数据资源,如联系人...

    Android识别TextView的Uri并在自己的应用程序中打开

    1. **理解Uri** Uri是Android中用于表示资源位置的数据结构,它包含了访问特定资源所需的所有信息,如协议、服务器地址、路径等。在TextView中,Uri通常以超链接的形式存在,比如http://或mailto:开头的字符串。 2...

    uri-schemes-1.x-源码.rar

    通过对"uri-schemes-1.x-源码"的深入研究,开发者可以更好地理解URI的底层运作,这对于网络编程、服务器开发以及协议实现等领域都是至关重要的。此外,理解源码也有助于定制化需求,例如创建新的URI schemes或改进...

    androdi ContentProvider和Uri详解

    TestCP可能是本次讲解的一个实践示例或者测试用例,它可能包含了一个简单的ContentProvider实现和相关的测试代码,帮助开发者理解和掌握ContentProvider与Uri的使用。 总结起来,Android的ContentProvider和Uri是...

    查看android.provider包中的uri内容

    在Android开发中,`android.provider`包是系统提供的一个核心包,主要用于与系统的各种内容提供者...而通过专门的工具或方法查看这些`URI`的详细内容,可以帮助开发者深入理解Android的框架机制,并优化其代码实现。

    URI:QuestURIs URI

    在实际应用中,理解URI的结构和规则至关重要,因为它们是Web服务、API调用、数据交换等众多技术的核心。通过掌握Quest对URI的支持,开发者可以更高效地处理与资源定位相关的任务,提高程序的灵活性和可维护性。如果...

    URI-exercises:URI练习解析

    通过这些练习,学习者可以深入理解URI的工作原理,掌握如何在实际项目中正确使用和操作URI,同时也能提高SQL数据库操作技能。对于Java开发者来说,这是提升Web开发能力的重要一步,因为URI是HTTP请求的核心部分,而...

    WSDL URI 代码解析

    WSDL URI,即WSDL文件的统一资源标识符,是访问和理解Web服务的关键。 在本文中,我们将深入探讨如何解析WSDL URI,并通过源码分析来理解其工作原理。我们将以`ServerCreator.java`这个文件作为示例,它很可能是一...

    URI:URI在线裁判练习

    通过这些练习,你可以深入理解URI的工作原理,提高处理网络请求的能力,这对开发Web应用、爬虫程序或者任何涉及网络通信的项目都非常有帮助。同时,掌握好URI的处理也意味着你能够更好地理解和使用API,因为许多API...

    URI:解决了URI问题!

    首先,理解URI的构成至关重要。一个URI通常由三部分组成:方案(scheme)、权威部分(authority)和路径(path)。例如,http://example.com/path/to/resource。在这里,"http"是方案,"example.com"是权威部分,"/...

    URI,URL常识

    ### URI与URL的基础概念 #### 一、URI(Uniform Resource Identifier):统一资源标识符 在互联网技术领域中,URI是用于唯一标识一个资源的一种标准形式。...理解这些概念对于正确地使用和构建互联网资源至关重要。

    Java网络编程技术 JAVA

    理解URI的解析至关重要,因为某些URI可能包含复杂的结构,如查询参数或身份验证信息。`URI`仅负责解析,而`URL`则可以用于实际的资源访问。例如,`http://www.example.com/path?query=param`这样的URI,通过`URL`...

    URI

    理解URI的结构和Java中的URI类的操作,对于任何Java开发者来说都至关重要,因为它可以帮助我们正确地定位和访问网络资源。 此外,需要注意的是,虽然URI可以代表任何类型的资源,但URL是URI的一个子集,它具体指定...

    uriparser-0.7.7.zip

    - `docs`目录:可能包含API文档和使用指南,帮助开发者理解和使用库。 - `examples`目录:示例代码,展示如何在实际项目中应用`uriparser`。 - `LICENSE`文件:库的许可协议,规定了使用、修改和分发`uriparser`的...

    Android开发的模拟手机短信

    在模拟手机短信的过程中,还需要理解URI的概念。在Android中,每个Content Provider都有一个独特的URI,用于唯一标识它所提供的数据。例如,短信的URI通常是`content://sms/`,通过这个URI,我们可以查询、插入、...

Global site tag (gtag.js) - Google Analytics