URL(Uniform Resource Locator)是最常见的URI(Uniform Resource Identifier)。URI只标识资源,URL既标识资源也获取资源。
URL是在JAVA中定位和获取网络数据最为简便的方法。
URI
URI语法格式如下:
模式:模式特定部分
当前的,模式有:
data:;连接中直接包含的Base64编码数据,参见RFC 2397;
file:本地磁盘上的文件
ftp:FTP服务器
http:使用超文本传输协议的国际互联网服务器
mailto:电子邮件地址
magnet:可以通过对等网络下载的资源
telnet:与基于Telnet的服务的连接
urn:统一资源名(Uniform Resource Name,URN)
还包括其他rmi,jar,jndi,doc等
URL
URL的语法格式为:
protocol://userInfo@host:port/path?query#fragment
protocol:可以是file、ftp、http、https、magnet、telnet等
userInfo:用户信息
host:服务器的主机名或IP地址
port:可选,在默认端口执行则不需要(如http在80端口)
用户信息、主机和端口一起构成权威机构(Authority),以上字段均可通过对应的get方法(如getProtocol()、getHost()等)获取,除getPort返回int外,其他方法均返回String。
path:指向服务器的特定目录
query:向服务器提供的字符串参数
相对URL
继承父文档部分信息,可以省去部分信息,将新目录和父目录进行裁截、拼接。
例如:
在浏览器浏览
http://www.ibiblio.org/java/javafaq/javatutorial.html
的时候点击相对链接
<a href="javafaq.html">
则将访问:
http://www.ibiblio.org/java/javafaq/javafaq.html
若相对链接以"/"开头则相对的是根目录,若点击以下链接:
<a href="/projects/ipv6">
将访问:
http://www.ibiblio.org/projects/ipv6
相对链接允许使用多种协议来提供文档树,允许将文档树从一个网站复制或移动到另一个网站,而不会破坏所有的内部链接。
构建URL
最常用的直接由字符串构建:
public URL(String url) throws MalformedException
或通过指定协议、主机名和文件构建:
public URL(String protocol,String hostname,String file)throws MalformedException
当创建的URL为虚拟机不支持的协议时 抛出MalformedException异常。
URL的相等性和比较
指向同一主机上同一端口和同一路径下的相同资源,而且拥有相同片段标识符和相同查询字符串的两个URL被认为是相同的。
equals:尝试解析DNS服务以判断两个URL是否相同,是一个阻塞的IO操作;
sameFile:与equals基本一致,但 不考虑片段标识符。
URL没有实现Comparable。
URL编码和解码
分部分进行,避免对不需要编解码的部分进行操作