URL(Uniform Resource Locator)是最常見的URI(Uniform Resource Identifier)遍尺。URI只標(biāo)識(shí)資源质蕉,URL既標(biāo)識(shí)資源也獲取資源挠轴。
URL是在JAVA中定位和獲取網(wǎng)絡(luò)數(shù)據(jù)最為簡(jiǎn)便的方法传睹。
URI
URI語(yǔ)法格式如下:
模式:模式特定部分
當(dāng)前的,模式有:
data:岸晦;連接中直接包含的Base64編碼數(shù)據(jù)欧啤,參見RFC 2397;
file:本地磁盤上的文件
ftp:FTP服務(wù)器
http:使用超文本傳輸協(xié)議的國(guó)際互聯(lián)網(wǎng)服務(wù)器
mailto:電子郵件地址
magnet:可以通過(guò)對(duì)等網(wǎng)絡(luò)下載的資源
telnet:與基于Telnet的服務(wù)的連接
urn:統(tǒng)一資源名(Uniform Resource Name启上,URN)
還包括其他rmi,jar,jndi,doc等
URL
URL的語(yǔ)法格式為:
protocol://userInfo@host:port/path?query#fragment
protocol:可以是file邢隧、ftp、http冈在、https倒慧、magnet、telnet等
userInfo:用戶信息
host:服務(wù)器的主機(jī)名或IP地址
port:可選,在默認(rèn)端口執(zhí)行則不需要(如http在80端口)
用戶信息纫谅、主機(jī)和端口一起構(gòu)成權(quán)威機(jī)構(gòu)(Authority)炫贤,以上字段均可通過(guò)對(duì)應(yīng)的get方法(如getProtocol()、getHost()等)獲取系宜,除getPort返回int外照激,其他方法均返回String发魄。
path:指向服務(wù)器的特定目錄
query:向服務(wù)器提供的字符串參數(shù)
相對(duì)URL
繼承父文檔部分信息盹牧,可以省去部分信息,將新目錄和父目錄進(jìn)行裁截励幼、拼接汰寓。
例如:
在瀏覽器瀏覽
http://www.ibiblio.org/java/javafaq/javatutorial.html
的時(shí)候點(diǎn)擊相對(duì)鏈接
<a href="javafaq.html">
則將訪問(wèn):
http://www.ibiblio.org/java/javafaq/javafaq.html
若相對(duì)鏈接以"/"開頭則相對(duì)的是根目錄,若點(diǎn)擊以下鏈接:
<a href="/projects/ipv6">
將訪問(wèn):
http://www.ibiblio.org/projects/ipv6
相對(duì)鏈接允許使用多種協(xié)議來(lái)提供文檔樹苹粟,允許將文檔樹從一個(gè)網(wǎng)站復(fù)制或移動(dòng)到另一個(gè)網(wǎng)站有滑,而不會(huì)破壞所有的內(nèi)部鏈接。
構(gòu)建URL
最常用的直接由字符串構(gòu)建:
public URL(String url) throws MalformedException
或通過(guò)指定協(xié)議嵌削、主機(jī)名和文件構(gòu)建:
public URL(String protocol,String hostname,String file)throws MalformedException
當(dāng)創(chuàng)建的URL為虛擬機(jī)不支持的協(xié)議時(shí) 拋出MalformedException異常毛好。
URL的相等性和比較
指向同一主機(jī)上同一端口和同一路徑下的相同資源,而且擁有相同片段標(biāo)識(shí)符和相同查詢字符串的兩個(gè)URL被認(rèn)為是相同的苛秕。
equals:嘗試解析DNS服務(wù)以判斷兩個(gè)URL是否相同肌访,是一個(gè)阻塞的IO操作;
sameFile:與equals基本一致艇劫,但 不考慮片段標(biāo)識(shí)符吼驶。
URL沒(méi)有實(shí)現(xiàn)Comparable。
URL編碼和解碼
分部分進(jìn)行店煞,避免對(duì)不需要編解碼的部分進(jìn)行操作