文章目录
- URI:统一资源标识符(用来标识抽象或物理资源的一个紧凑字符串)
- URL:统一资源定位符(用地址定位一个资源)
- URN:统一资源名称(用名称定位一个资源)
是URL的一定是URI反之亦然。
一、Java URI Api
public static void uriDemo() {
//URI通常情况下都是层次(带“/”)的,但是也有不透明(没有“/”)的,层次的URI包含模式,主机,站点等各个部分,当然可能某些部分不包含,但是不透明的URI只包含三个部分,Scheme,Scheme-specific-part,Fragment.
// 如:mailto:jijianshuai@infcn.com.cn
/*如果URI是非透明只能获取到1~3个信息。
如果URI是层次结构则能获取所有信息。
方法中带Raw的,是获取编码后的URI部分信息。非ascii的字符需要进行编码,不带Raw的方法是解码后的信息。
getScheme、getHost、getPort这三个方法没有Raw方法,是因为这三部分不会出现非ascii的字符
*/
// 创建URI
URI uri = URI.create("http://192.168.0.43:8080/test/get?name='test'&age=18");
// 获取授权机构
System.out.println(uri.getAuthority());
System.out.println(uri.getRawAuthority());
// 获得模式 http
System.out.println(uri.getScheme());
// 片段
System.out.println(uri.getFragment());
System.out.println(uri.getRawFragment());
//主机
System.out.println(uri.getHost());
// 路径
System.out.println(uri.getPath());
System.out.println(uri.getRawPath());
// 端口
System.out.println(uri.getPort());
// 查询字符串
System.out.println(uri.getQuery());
System.out.println(uri.getRawQuery());
// 用户信息
System.out.println(uri.getUserInfo());
System.out.println(uri.getRawUserInfo());
// resolve 把相对URI转为绝对URI
URI uri1 = URI.create("/user/list.html");
System.out.println(uri.resolve(uri1));//http://192.168.0.43:8080/user/list.html
// relativize 将绝对路径的转为相对路径
System.out.println(uri.relativize(uri1));///user/list.html
// 比较 相同返回 0 否则返回-1
System.out.println(uri1.compareTo(uri));
}