java.net.URI 简介 文档 API
URI 简介
public final class java.net.URI extends Object implements Comparable<URI>, Serializable
URI 语法和组成部分
[ scheme : ] scheme-specific-part[ # fragment]
其中,方括号 [...] 用于描述可选组成部分,字符 : 和 # 代表它们自身。
mailto:java-net@java.sun.com
news:comp.lang.java
urn:isbn:096139210x
分层 URI 或者为绝对 URI(其特定于scheme的部分以斜线字符 '/' 开始),或者为相对 URI,即不指定scheme的 URI。下面是分层 URI 的一些示例:
http://java.sun.com/j2se/1.3/
docs/guide/collections/designfaq.html#28
../../../demo/jfc/SwingSet2/src/SwingSet2.java
file:///~/calendar
分层 URI 还要按照下面的语法进行进一步的解析
[ scheme :][ // authority][ path][ ? query][ # fragment]
其中, :、 /、 ? 和 # 代表它们自身。
[ user-info @] host[ : port]
其中,字符 @ 和 : 代表它们自身。
- 方案Scheme String
- 特定于方案的部分SchemeSpecificPart String
- 授权Authority String
- 用户信息UserInfo String
- 主机Host String
- 端口Port int
- 路径Path String
- 查询Query String
- 片段Fragment String
针对 URI 实例的运算
http://java.sun.com/j2se/1.3/docs/guide/collections/designfaq.html#28
http://java.sun.com/j2se/1.3/demo/jfc/SwingSet2/src/SwingSet2.java
u .relativize( u .resolve( v )).equals( v )
和
u .resolve( u .relativize( v )).equals( v )。
此运算在下面的场合非常有用:构造一个包含 URI 的文档,该 URI 必须尽可能是根据文档的基本 URI 建立的相对 URI。
字符分类
- alpha(初始的) US-ASCII 字母字符,'A' 到 'Z' 以及 'a' 到 'z'
- digit US-ASCII 十进制数字符,'0' 到 '9'
- alphanum 所有 alpha 和 digit 字符
- unreserved(不保留的) 所有 alphanum 字符及字符串 "_-!.~'()*" 中包含的字符
- punct 字符串 ",;:$&+=" 中包含的字符
- reserved(保留的) 所有 punct 字符及字符串 "?/[]@" 中包含的字符
- escaped(转义的) 转义八位组,即三部分组合:百分号 ('%') 后跟两个十六进制数('0'-'9'、'A'-'F' 和 'a'-'f')
- other 未包含在 US-ASCII 字符集中的 Unicode 字符不是控制字符(根据 Character.isISOControl 方法),并且不是空格字符(根据 Character.isSpaceChar 方法)(与 RFC 2396 有些出入,RFC 2396 限制为 US-ASCII)
转义八位组、引用、编码和解码
- 当要求 URI 不能包含任何 other 字符以严格遵守 RFC 2396 时,需要对非 US-ASCII 字符进行编码。
- 要引用 组成部分中的非法字符。用户信息、路径、查询和fragment组成部分在判断哪些字符合法哪些字符非法上稍有不同。
- 字符的编码 方式是,用代表该字符在 UTF-8 字符集中的字符的转义八位组序列取代该字符。例如,欧元符号 ('\u20AC') 编码后为 "%E2%82%AC"。(与 RFC 2396 有些出入,RFC 2396 未指定任何特殊字符集)。
- 非法字符通过简单地对它进行编码来引用。例如,空格字符,用 "%20" 取代它来进行引用。UTF-8 包含 US-ASCII,因此对于 US-ASCII 字符,此转换具有的效果与 RFC 2396 的要求相同。
- 对转义八位组序列进行解码 的方法是,用它所代表的 UTF-8 字符集中的字符的序列将它取代。UTF-8 包含 US-ASCII,因此解码具有对引用的任何 US-ASCII 字符取消引用的效果,以及对任何编码的非 US-ASCII 字符进行解码的效果。如果在对转义八位组进行解码时出现解码错误,则出错的八位组用 Unicode 替换字符 '\uFFFD' 取代。
- 单参数构造方法要求对参数中的任何非法字符都必须引用,并保留出现的任何转义八位组和 other 字符。
- 多参数构造方法根据其中出现的组成部分的需要对非法字符进行引用。百分号字符 ('%') 始终通过这些构造方法引用。任何 other 字符都将被保留。
- getRawUserInfo、getRawPath、getRawQuery、getRawFragment、getRawAuthority 和 getRawSchemeSpecificPart 方法以原始形式返回它们的相应组成部分的值,不解释任何转义八位组。由这些方法返回的字符串有可能包含转义八位组和 other 字符,但不包含任何非法字符。
- getUserInfo、getPath、getQuery、getFragment、getAuthority 和 getSchemeSpecificPart 方法解码相应的组成部分中的任何转义八位组。由这些方法返回的字符串有可能包含 other 字符和非法字符,但不包含任何转义八位组。
- toString 返回带所有必要引用的 URI 字符串,但它可能包含 other 字符。
- toASCIIString 方法返回不包含任何 other 字符的、完全引用的和经过编码的 URI 字符串。
标识
new URI( u .toString()) .equals( u ) .
对于不包含冗余语法的任何 URI u,比如在一个空授权前面有两根斜线(如 file:///tmp/)和主机名后面跟一个冒号但没有端口(如 http://java.sun.com:),以及除必须引用的字符之外不对字符编码的情况,下面的标识也有效(3个参数):
new URI( u .getScheme() , u .getSchemeSpecificPart() , u .getFragment()) .equals( u )
在所有情况下,以下标识有效(6个参数,草泥马的,根本没有6个参数的构造方法!):
new URI( u .getScheme() , u .getUserInfo() , u .getAuthority() , u .getPath() , u .getQuery() , u .getFragment()) .equals( u )
如果 u 为分层的,则以下标识有效(7个参数):
new URI( u .getScheme() , u .getUserInfo() , u .getHost() , u .getPort() , u .getPath() , u .getQuery() , u .getFragment()) .equals( u )
如果 u 为分层的并且没有授权或没有基于服务器的授权。
URI、URL 和 URN
API
- 1个参数,URI(String str) 通过解析给定的字符串构造一个 URI。
- 3个参数,URI(String scheme, String ssp, String fragment) 根据给定的组成部分构造 URI。
- 4个参数,URI(String scheme, String host, String path, String fragment) 根据给定的组成部分构造分层 URI。
- 5个参数,URI(String scheme, String authority, String path, String query, String fragment) 根据给定的组成部分构造分层 URI。
- 7个参数,URI(String scheme, String userInfo, String host, int port, String path, String query, String fragment) 根据给定的组成部分构造一个分层 URI。
- 此便捷工厂方法的工作方式类似于调用 URI(String) 构造方法;由该构造方法抛出的任何 URISyntaxException 都被捕获,并包装到一个新的 IllegalArgumentException 对象中,然后抛出此对象。
- 此方法的使用场合是:已知给定的字符串是合法的 URI(例如,程序中声明的 URI 常量),该字符串无法这样解析时将被视为编程错误。
- 当 URI 从用户输入或从其他易于引起错误的源构造时,应该使用直接抛出 URISyntaxException 的构造方法。
- String getScheme() 返回此 URI 的方案【Scheme】部分。
- URI 的方案组成部分(如果定义了)只包含 alphanum 类别和字符串 "-.+" 中的字符。
- 方案始终以 alpha 字符开始。
- int getPort() 返回此 URI 的【端口号】。
- URI 的端口组成部分(如果定义了)是一个非负整数。
- 如果端口未定义,则返回 -1
- String getHost() 返回此 URI 的【主机】组成部分。
- String getRawPath() 返回此 URI 的原始/已解码的【路径】组成部分。
- 如果路径未定义,则返回 null
- String getRawAuthority() 返回此 URI 的原始/已解码的授权组成部分。
- URI 的授权组成部分(如果定义了)只包含“商用 at”字符 ('@') 和 unreserved、punct、escaped 和 other 类别中的字符。
- 如果授权是基于服务器的,则它被进一步约束为具有有效的用户信息、主机和端口组成部分。
- String getRawFragment() 返回此 URI 的原始/已解码的片段组成部分。
- String getRawQuery() 返回此 URI 的原始/已解码的查询组成部分。
- String getRawSchemeSpecificPart() 返回此 URI 原始的特定于方案的解码部分(从不为 null)。
- 特定于方案的部分永远不会是未定义的,但它可能为空("")。
- URI 的特定于方案的部分只包含合法的 URI 字符。
- String getRawUserInfo() 返回此 URI 的原始/已解码的用户信息组成部分。
- URI 的用户信息组成部分(如果定义了)只包含 unreserved、punct、escaped 和 other 类别中的字符。
- boolean isAbsolute() 判断此 URI 是否为绝对的。
- 当且仅当 URI 具有方案组成部分时,它才是绝对的。
- boolean isOpaque() 判断此 URI 是否为不透明的。
- 当且仅当 URI 是绝对的且其特定于方案的部分不是以斜线字符 ('/') 开始时,此 URI 才是不透明的。
- 不透明的 URI 具有一个方案、一个特定于方案的部分,以及可能会有的一个片段;所有其他组成部分都是未定义的。
- String toASCIIString() 以 US-ASCII 字符串形式返回此 URI 的内容。
- 如果此 URI 未包含 other 类别的任何字符,则调用此方法将返回的值与调用 toString 方法返回的值相同。否则,此方法的工作方式类似于调用该方法,然后对结果进行编码。
- URL toURL() 根据此 URI 构造一个 URL。
- 首先检查得知此 URI 为绝对路径后,此便捷方法的工作方式就好像调用它与对表达式 new URL(this.toString()) 进行计算是等效的。
- 如果此 URL 不是绝对的,抛出 IllegalArgumentException;如果无法找到 URL 的协议处理程序,或者如果在构造 URL 时发生其他错误,抛出MalformedURLException 。
- URI normalize() 规范化此 URI 的路径。
- URI relativize(URI uri) 根据此 URI 将给定 URI 相对化。
- URI parseServerAuthority() 尝试将此 URI 的授权组成部分(如果已定义)解析为用户信息、主机和端口组成部分。
- URI resolve(URI uri) 根据此 URI 解析给定的 URI。
- URI resolve(String str) 解析给定的字符串,然后在此 URI 的基础上构造一个新的 URI。 此方法与进行 resolve(URI.create(str)) 的作用相同。
java.net.URI 简介 文档 API的更多相关文章
- Java解析word,获取文档中图片位置
前言(背景介绍): Apache POI是Apache基金会下一个开源的项目,用来处理office系列的文档,能够创建和解析word.excel.ppt格式的文档. 其中对word文档的处理有两个技术 ...
- 利用Java动态生成 PDF 文档
利用Java动态生成 PDF 文档,则需要开源的API.首先我们先想象需求,在企业应用中,客户会提出一些复杂的需求,比如会针对具体的业务,构建比较典型的具备文档性质的内容,一般会导出PDF进行存档.那 ...
- 《Java开发学习大纲文档》V7.0
<Java开发学习大纲文档>V7.0简介: 本文档是根据企业开发所需要掌握的知识点大纲进行总结汇编,是Java开发工程师必备知识体系,系统化学习针对性非常强,逻辑分析能力非常清晰;技术方面 ...
- 《Java开发学习大纲文档》V6.0(已经不公布了,请查看第七版)
<Java开发大纲学习文档第六版>简介: 有需要的私聊作者QQ:253173641.
- jQuery全屏滚动插件fullPage.js中文帮助文档API
jQuery全屏滚动插件fullPage.js中文帮助文档API 发现了一个fullPage.js插件,于是百度了一下,还就是这个插件的作用,其实有很多网站都做了全屏滚动的特效,效果也很好看,今天 ...
- 百度地图和高德地图坐标系的互相转换 四种Sandcastle方法生成c#.net帮助类帮助文档 文档API生成神器SandCastle使用心得 ASP.NET Core
百度地图和高德地图坐标系的互相转换 GPS.谷歌.百度.高德坐标相互转换 一.在进行地图开发过程中,我们一般能接触到以下三种类型的地图坐标系: 1.WGS-84原始坐标系,一般用国际GPS纪录仪记 ...
- 001-Java®语言规范、Java平台标准版文档、JVM概述
一.概述 相关api地址:JDK10 JDK 9 JDK 8 JDK 7 JDK 6 Java语言和虚拟机规范: https://docs.oracle.com/javase/spec ...
- GrapeCity Documents (服务端文档API组件) V3.0 正式发布
近日,葡萄城GrapeCity Documents(服务端文档API组件)V3.0 正式发布! 该版本针对 Excel 文档.PDF 文档和 Word 文档的 API 全面更新,加入了用于生成 Exc ...
- GrapeCity Documents for Excel 文档API组件 V2.2 新特性介绍
GrapeCity Documents for Excel 文档API组件 V2.2 正式发布,本次新版本包含诸多重量级产品功能,如:将带有形状的电子表格导出为 PDF.控制分页和电子表格内容.将Ex ...
随机推荐
- 在静态方法中应用spring注入的类
最近在一次项目的重构中,原项目需要在静态方法中调用service,现在需要更换框架,service需要自动注入,无法再静态方法中调用 解决思路: 创建一个当前类的静态变量,创建一个方法,使用@Post ...
- web过滤器使用spring依赖注入
1.问题描述 在web项目中,使用filter过滤器十分常见,但是在过滤器中spring Bean即使在配置文件中配置了扫描filter对应的包,也无法正确注入spring 管理的Bean. 2.原因 ...
- 求N!末尾所得数字0的个数
题目:给定一个整数N ,那么N 的阶乘N !末尾有多少个0呢? 例如:N = 10,N! = 3628800,所以N!末尾就有2个零. 分析:如果直接先算出N!阶乘,很容易导致内存溢出.显然,直接算出 ...
- 时间插件datetimepicker
相关datetimepicker用法查看官网http://eonasdan.github.io/bootstrap-datetimepicker/ {% load staticfiles %} < ...
- 【WIN10】程序內文件讀取與保存
DEMO下載:http://yunpan.cn/cFHIZNmAy4ZtH 访问密码 cf79 1.讀取與保存文件 Assets一般被認為是保存用戶文件數據的地方.同時,微軟還支持用戶自己創建文件夾 ...
- PHP 笔记——自定义函数
1. 定义函数 function function_name ([$arg_1],[$arg_2], ... [$arg_n]){ fun_body; [return arg_n;] } 在PHP中, ...
- luogu P2439 [SDOI2005]阶梯教室设备利用
题目链接 luogu P2439 [SDOI2005]阶梯教室设备利用 题解 dp 代码 #include<vector> #include<cstdio> #include& ...
- codevs 5790 素数序数
5790 素数序数(筛素数版) 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 给定一个整数n,保证n为正整数且在int范 ...
- luoguP4101 [HEOI2014]人人尽说江南好 结论
题目大意: 给定\(n\)堆初始大小为\(1\)的石堆 每次选择两堆石子合并,特别的,合并之后的两堆石子不能\(> m\) 询问先手必赢? 不妨设我们是先手,且最后我们必胜 我们考虑构造局面\( ...
- Linux性能监控分析命令(二)—sar命令介绍
性能监控分析的命令包括如下: 1.vmstat 2.sar 3.iostat 4.top 5.free 6.uptime 7.netstat 8.ps 9.strace 10.lsof ======= ...