简介
说明
本文介绍Java里网络相关的类:java.net.URI。
URL介绍
URI(Uniform Resource Identify),统一资源标识符,是一个用于标识某一互联网资源名称的字符串。
URI的结构
基本形式
[scheme:]scheme-specific-part[#fragment]
分为三部分:scheme、scheme-specific-part、fragment
进一步划分
[scheme:][//authority][path][?query][#fragment]
有下面几个规则:
- path可以有多个,每个用/连接,比如
- scheme://authority/path1/path2/path3?query#fragment
- query参数可以带有对应的值,也可以不带,如果带对应的值用=表示,如:
- scheme://authority/path1/path2/path3?id = 1#fragment,这里有一个参数id,它的值是1
- query参数可以有多个,每个用&连接
- scheme://authority/path1/path2/path3?id = 1&name = mingming&old#fragment
- 这里有三个参数:
- 参数1:id,其值是:1
- 参数2:name,其值是:mingming
- 参数3:old,没有对它赋值,所以它的值是null
- 在android中,除了scheme、authority是必须要有的,其它的几个path、query、fragment,它们每一个可以选择性的要或不要,但顺序不能变,比如:
- 其中"path"可不要:scheme://authority?query#fragment
- 其中"path"和"query"可都不要:scheme://authority#fragment
- 其中"query"和"fragment"可都不要:scheme://authority/path
- "path","query","fragment"都不要:scheme://authority
- 等等……
终极划分
authority可以分为host:port的形式,即再次划分后是这样的:
[scheme:][//host[:port]][path][?query][#fragment]
其实还有如下这种形式,但不常见:
[scheme:][//[user-info@]host[:port]][path][?query][#fragment]
构建方法
方法 | 作用 |
public URI(String str) throws URISyntaxException | 通过给定的url字符串创建URI |
public URI(String scheme, String userInfo, String host, int port, String path, String query, String fragment) throws URISyntaxException | 通过指定参数创建URI。 |
public URI(String scheme, String authority, String path, String query, String fragment) throws URISyntaxException | 通过指定参数创建URI。 |
public URI(String scheme, String host, String path, String fragment) throws URISyntaxException | 通过指定参数创建URI。 |
public URI(String scheme, String ssp, String fragment) throws URISyntaxException | 通过指定参数创建URI。 |
public static URI create(String str) | 静态创建URI。(推荐) |
解析方法
方法 | 作用 |
public String getScheme() | 返回URI的协议 |
public String getUserInfo() | 返回URI的用户信息 |
public String getAuthority() | 返回URI的授权(域名+端口号) |
public String getHost() | 返回URI的主机。 |
public int getPort() | 返回URI端口部分。 |
public String getPath() | 返回URI路径部分。 |
public String getQuery() | 返回URI查询参数部分。 |
public String getFragment() | 获取此 URI 的锚点(也称为"片段")。 |
public URL toURL() | 转为java.net.URL |
实例1:通过完整url创建
package com.example.a;
import java.net.URI;
public class Demo {
public static void main(String[] args) {
String uriStr = ;
URI uri = URI.create(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());
}
}
运行结果
toString: https://knife.blog.csdn.net/article/details/124509399?name=Tony&age=25#abc
toASCIIString: https://knife.blog.csdn.net/article/details/124509399?name=Tony&age=25#abc
#####################################################
Scheme: https
SchemeSpecificPart: /?name=Tony&age=25
Authority: knife.blog.csdn.net
UserInfo: null
Host: knife.blog.csdn.net
Port: -1
Path: /article/details/124509399
Query: name=Tony&age=25
Fragment: abc
#####################################################
RawSchemeSpecificPart: /?name=Tony&age=25
RawAuthority: knife.blog.csdn.net
RawUserInfo: null
RawPath: /article/details/124509399
RawQuery: name=Tony&age=25
RawFragment: abc