`
jiangwenfeng762
  • 浏览: 286305 次
  • 性别: 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段并把它呈献给该用户。

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


分享到:
评论

相关推荐

    Android Uri

    android uri的一些理解资料,比较全面的关于uri的解释,可作参考。

    vscode-uri:VS Code及其扩展中使用的URI实现

    vscode-uri 该模块包含VS Code及其扩展使用的URI实现。 它支持将字符串解析为scheme , authority , path , query和fragment URI组件,如下面所定义: : foo://example.com:8042/over/there?name=ferret#nose ...

    详解android 通过uri获取bitmap图片并压缩

    主要介绍了详解android 通过uri获取bitmap图片并压缩的相关资料,希望通过本文能帮助到大家,让大家理解这部分内容,需要的朋友可以参考下

    bytewise-uri:字节键路径的URI编码方案

    在设计键空间时,最重要的因素是您可以轻松地理解键的排序语义,从而能够合理地对它们进行范围和查询。 通过消除使用较不正式的方法来建立索引时出现的许多细微的边缘情况, bytewise可以实现此目的。 bytewise-uri...

    深入理解Nginx模块开发与架构解析(完整版)

    深入理解Nginx模块开发与架构解析(完整版) pdf,nginx必备知识

    URIs:只是一个帮助我理解 C# 和 URI 处理的 repo

    URI 该任务由 Sebastián 于 2015 年 8 月 5 日星期三发送,展示了如何在小提琴的帮助下动态创建 QueryString。 用: 对于任何不是列表或类的对象(即:“对象”):object.ToQueryString().ToURL(“ ”) 以下对象是...

    contentprovider

    为此 Android提供一系列的帮助类(在android provider包下) 里面包含了很多以类变量形式给出的查询字符串 这种方式更容易让我们理解一点 因此 如上面content: contacts people 45这个URI就可以写成如下形式: ...

    elasticsrarch(ELK文档).rar

    8. Request Body Search和Search API(URI)学习 9. 了解ElasticSearch集群优势 10. 完成ElasticSearch集群搭建及集群监控 11. 理解ElasticSearch集群内部运行机制 12. 了解Logstash使用方法 13. 完成Logstash...

    深入理解JavaScript单体内置对象

    JavaScript中定义了两个单体内置对象:Global和...Global对象的encodeURI()和encodeURIComponent()方法可以对URI进行编码,encodeURI()主要用于整个URI,而encodeURIComponent()主要用于对URI中的某一段进行编码。 v

    理解RESTful架构、Hessian简介、机制、Webservice及cxf介绍

    (1)每一个URI代表一种资源; (2)客户端和服务器之间,传递这种资源的某种表现层(Representation); (3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。 Hessian: 是由caucho...

    WPF 资源(资源的理解和应用)

    1.动态引用资源和静态引用资源 2.向程序添加二进制资源 3.使用Pack URI路径访问二进制资源 4.后台查询资源 5.资源字典

    理解PHP中的MVC编程之控制器

    简单来讲,控制器的作用就是接受请求。它使用获取的方法,在这里是通过URI,载入一个功能模块来刷新或者提交一个表述层。控制器将使用$_GET自动全局变量来判断载入哪一个模块。

    javascript encodeURI和encodeURIComponent的比较

    为了解释它们的不同,我们首先需要理解RFC-2396中对于URI中的字符分类 保留字符(reserved characters):这类字符是URI中的保留关键字符,它们用于分割URI中的各个部分。这些字符是:”;” | “/” | “?” | “:”...

    Android新手Content Provider获取通讯录,短信,通话记录

    理解Content Uri的概念和作用,掌握通过Content Provider访问联系人的方法,掌握通过Content Provider访问通话记录的方法,掌握通过Content Provider访问短信的方法。

    struts深入理解

    Struts 使用 Model 2 架构...当 ActionServlet 从容器接收到一个请求,它使用URI (或者路径“path”) 来决定那个Action 将用来处理请求。一个 Action可以校验输入,并且访问业务层以从数据库或其他数据服务中检索信息。

    认证系统交互接口文档

    备注是一些解释,或者可以写一下例子,比如负责json结构的情况,最好写上例子,好让前端能更好理解;是否必填是字段的是否必填。4、返回参数结构有几种情况:1、如果只返回接口调用成功还是失败(如新增、删除、修改...

    java获取路径的各种方法

    基本概念的理解绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:C:xyz est.txt 代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个URL绝对路径。相对...

    nginx.conf

    #server表示虚拟主机可以理解为一个站点,可以配置多个server节点搭建多个站点 #每一个请求进来确定使用哪个server由server_name确定 #location用来匹配同一域名下多个URI的访问规则 #比如动态资源如何跳转,...

    尚硅谷SSM整合

    本视频基于Maven+SpringMVC+Spring+MyBatis+Bootstrap的组合,快速开发一个完整的CRUD功能,视频除过对框架组合的基本使用外,还涉及到许多的开发细节:Bootstrap搭建页面,MyBatis逆向工程使用,Rest风格的URI,@...

    straw-android-plugin:稻草 android 插件

    HTTP 插件得到用户界面插件吐司吐司长日志插件冗长的调试信息警告错误共享首选项插件得到放具有清除去掉倾倒浏览器插件打开@参数网址语言环境...插件没有方法乌里插件open 打开Android可以理解的任何uri版本历史2013...

Global site tag (gtag.js) - Google Analytics