URI Class
package java.net;
public final class URI
implements Comparable<URI>, Serializable
URI语法和组成部分
使用字符串格式描述URI 。
URI通过解析字符串获取指定参数 . 比如 : 获取 host , port 等等。
Components of all URIs: [scheme:]scheme-specific-part[#fragment]
[scheme:]scheme-specific-part[#fragment]
Hierarchical URI components: [scheme:][//authority][path][?query][#fragment]
[scheme:][//authority][path][?query][#fragment]
Server-based authority: [@][:] , 所以也可以理解为以下内容
[scheme:][// [user-info@]host[:port]][path][?query][#fragment]
URI组成部分
Component | Type | 说明 |
---|---|---|
scheme | String | 传输协议 , 比如 : http , https , redis ,git , ftp 等等 |
scheme-specific-part | String | |
authority | String | |
user-info | String | |
host | String | IP地址 |
port | int | 端口 |
path | String | |
query | String | |
fragment | String |
Java代码示例
为了更清晰的了解URI使用和解析
String uriStr = "https://username:password@127.0.0.1:8080/admin/cms?name=miduo#loveyou1314";
try {
URI uri = new URI(uriStr);
System.out.println( "[toString] : " + uri.toString() );
System.out.println( "[toASCIIString] : " + uri.toASCIIString() );
System.out.println("#####################################################");
System.out.println("Scheme : " + uri.getScheme() );
System.out.println("SchemeSpecificPart : " + uri.getSchemeSpecificPart() );
System.out.println("Authority : " + uri.getAuthority() );
System.out.println("UserInfo : " + uri.getUserInfo() );
System.out.println("Host : " + uri.getHost() );
System.out.println("Port : " + uri.getPort() );
System.out.println("Path : " + uri.getPath() );
System.out.println("Query : " + uri.getQuery() );
System.out.println("Fragment : " + uri.getFragment() );
System.out.println("#####################################################");
System.out.println("RawSchemeSpecificPart : " + uri.getRawSchemeSpecificPart() );
System.out.println("RawAuthority : " + uri.getRawAuthority() );
System.out.println("RawUserInfo : " + uri.getRawUserInfo() );
System.out.println("RawPath : " + uri.getRawPath() );
System.out.println("RawQuery : " + uri.getRawQuery() );
System.out.println("RawFragment : " + uri.getRawFragment() );
}
catch (URISyntaxException e) {
e.printStackTrace();
}
------------------------- Console -------------------------
[toString] : https://username:password@127.0.0.1:8080/admin/cms?name=miduo#loveyou1314
[toASCIIString] : https://username:password@127.0.0.1:8080/admin/cms?name=miduo#loveyou1314
#####################################################
Scheme : https
SchemeSpecificPart : //username:password@127.0.0.1:8080/admin/cms?name=miduo
Authority : username:password@127.0.0.1:8080
UserInfo : username:password
Host : 127.0.0.1
Port : 8080
Path : /admin/cms
Query : name=miduo
Fragment : loveyou1314
#####################################################
RawSchemeSpecificPart : //username:password@127.0.0.1:8080/admin/cms?name=miduo
RawAuthority : username:password@127.0.0.1:8080
RawUserInfo : username:password
RawPath : /admin/cms
RawQuery : name=miduo
RawFragment : loveyou1314
友情提示
- URI为JAVA官方提供的Class。所以很多第三方使用到URI。 所以我们必须了解URI的规则和用法才能更好的在第三方的场景使用。比如 : Jedis 使用 URI 方式获取账号、密码、地址、端口。
- 即使没有 username . 格式也必须保持 username:password 的规则。 username 可以不写,冒号必须存在,否则有些第三方在解析的时候以第二个冒号为准。解析报错。(具体场景看源码)
- 保持同一个语法规则。方便解析。