最後一個組件是fragment
盡管該組件作為URI的一部分出現
但不是絕對的
當使用URI進行某種檢索操作時
後面執行操作的軟件使用fragment聚焦於軟件感興趣的資源部分(在該軟件成功檢索到資源的數據後)
為了實際表現前面提到的組件信息
可以使用下面的URI
ftp://:
/public/notes?text=shakespeare#hamlet
上面的URI把ftp識別為大綱
把:
識別為基於服務器的授權機構(其中george是用戶信息
是主機
是端口)
把/public/notes識別為路徑
把text=shakespeare識別為查詢
把hamlet識別為片斷
本質上它是一個叫做george的用戶希望通過/public/notes路徑在服務器的
端口上檢索shakespeare文本的hamlet信息
在shakespeare成功的返回到該程序後
程序定位hamlet段並把它呈獻給該用戶
標准化可以通過目錄術語來理解
假定目錄x直接位於根目錄之下
x有子目錄a和b
b有文件memo
txt
a是當前目錄
為了顯示memo
txt中的內容(在微軟Windows下)
你可能輸入type \x\
\b\memo
txt
你也可能輸入type \x\a\
\b\memo
txt
在這種情況下
a和
的出現是沒有必要的
這兩種形式都不是最簡單的
但是如果輸入\x\b\memo
txt
你就指定了最簡單的路徑了
從根目錄開始訪問memo
txt
最簡單的\x\b\memo
txt路徑就是標准化的路徑
通常通過基本的和相對的URI訪問資源
基本的URI是絕對的URI
它唯一地標識了某種資源的名字空間
而相對的URI標識了與基礎的URI相對的資源
(與基本的URI不同
相對的URI在某種資源的生存周期內可以永遠不需要改變)
因為基本的和相對的URI都不能完整的識別某種資源
有必要把兩種URI通過解析過程合並
相反地
通過相對化從合並的URI中提取相對的URI也是可行的
注意 不透明的URI與其它的URI不同
它不服從標准化
分解和相對化
假定你把x://a/作為基礎的URI
並把b/c作為相對的URI
根據基礎URI分解這個相對的URI將產生x://a/b/c
根據x://a/相對化x://a/b/c將產生b/c
URI不能定位或讀取/寫入資源
這是統一的資源定位器(URL)的任務
URL是一種URI
但是它的大綱組件是已知的網絡協議(簡稱協議)
並且它把URI組件與某種協議處理程序(一種資源定位器和根據協議建立的約束規則與資源通訊的讀/寫機制)
URI一般不能為資源提供持久不便的名稱
這是統一的資源命名(URN)的任務
URN也是一種URI
但是全球唯一的
持久不便的
即使資源不在存在或不再使用
使用URI 網絡API通過提供了URI類(位於程序包中)
使我們在源代碼層使用URI成為可能
URI的構造函數建立了封裝URI的URI對象
URI的方法建立URI對象
如果授權機構組件是基於服務器的就分析它
提取URI組件
決定URI對象的URI是絕對的還是相對的
決定URI對象的URI是不透明的還是分層的
比較兩個URI對象中的URI
標准化(normalize)URI對象的URI
根據URI對象的基礎URI分解某個相對的URI以得到已分解的URI
根據URI對象的基礎URI關聯某個已分解的URI以得到相對的URI
把URI對象轉換為URL對象
我們進一步查看URI類
在它裡面有五個構造函數
最簡單的是URI(String uri)
這個構造函數把URI作為String類型的參數
把URI分解為組件
並把這些組件存儲在一個新的URI對象中
如果String對象的URI(通過uri引用)違反了RFC
的語法規則
其它的四個構造函數URI(String uri)將會產生一個
URISyntaxException對象
下面的代碼片斷演示了使用URI(String uri)建立封裝了一個簡單的URI組件的URI對象
URI uri = new URI (
);
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25928.html