URL 与 URI
很多人会混淆这两个名词。
URL:(Uniform/Universal Resource Locator 的缩写,统一资源定位符)。
URI:(Uniform Resource Identifier 的缩写,统一资源标识符)(代表一种标准)。
关系:
URI 属于 URL 更高层次的抽象,一种字符串文本标准。
就是说,URI 属于父类,而 URL 属于 URI 的子类。URL 是 URI 的一个子集。
二者的区别在于,URI 表示请求服务器的路径,定义这么一个资源。而 URL 同时说明要如何访问这个资源(http://)。
URI 示例
大家把浏览器地址栏里访问网站的地址认为是URL就好了,也就是以HTTP/HTTPS开头的URI子集。
端口 与 URL标准格式
何为端口?端口(Port),相当于一种数据的传输通道。用于接受某些数据,然后传输给相应的服务,而电脑将这些数据处理后,再将相应的回复通过开启的端口传给对方。
端口的作用:因为 IP 地址与网络服务的关系是一对多的关系。所以实际上因特网上是通过 IP 地址加上端口号来区分不同的服务的。
端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535。
URL 标准格式
通常而言,我们所熟悉的 URL 的常见定义格式为:
scheme://host[:port#]/path/.../[;url-params][?query-string][#anchor]
scheme //有我们很熟悉的http、https、ftp以及著名的ed2k,迅雷的thunder等。
host //HTTP服务器的IP地址或者域名
port# //HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如tomcat的默认端口是8080 http://localhost:8080/
path //访问资源的路径
url-params //所带参数
query-string //发送给http服务器的数据
anchor //锚点定位
Java中对URI的操作类
@Testpublic void uriTest() throwsException{
URI uri= new URI("https://www.qiandu.com:8080/goods/index.html?username=dgh&passwd=123#j2se");
System.out.println("scheme : " +uri.getScheme());
System.out.println("SchemeSpecificPart : " +uri.getSchemeSpecificPart());
System.out.println("Authority : " +uri.getAuthority());
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());
}
运行上面的代码,然后得到如下的结果:
Java中对URL的操作
@Testpublic void urlTest() throwsException{
URL url= new URL("https://www.qiandu.com:8080/goods/index.html?username=dgh&passwd=123#j2se");
System.out.println("URL: " +url.toString());
System.out.println("protocol: " +url.getProtocol());
System.out.println("authority: " +url.getAuthority());
System.out.println("file name: " +url.getFile());
System.out.println("host: " +url.getHost());
System.out.println("path: " +url.getPath());
System.out.println("port: " +url.getPort());
System.out.println("default port:" +url.getDefaultPort());
System.out.println("query: " +url.getQuery());
System.out.println("ref: " +url.getRef());
}
运行上面的代码,得到以下结果:
UserInfo属性
其实关于资源定位的时候还有一种写法,就是类似于sftp://tomcat@www.qiandu.com///app/index.pdf就是在主机名前面有类似于xxx@的东西,其实这种表示就:用户@主机名或者用户@IP。@前面表示登录主机的用户,也就是UserInfo了。