從JDK1.5開始,java
java.net包對統一資源定位符
(uniform resource locator URL)
和統一資源標識符服務器
(uniform resource identifier URI)
做了很是明確的區分。網絡
(1)URI是個純粹的句法結構,用於指定標識Web資源的字符串的各個不一樣部分。URL是URI的一個特例,它包含了定位Web資源的足夠信息。其餘URI,好比ide
mailto:cay@horstman.com
則不屬於定位符,由於根據該標識符沒法定位任何資源。post
URI 是統一資源標識符,而 URL 是統一資源定位符。所以,籠統地說,每一個 URL 都是 URI,但不必定每一個 URI 都是 URL。這是由於 URI 還包括一個子類,即統一資源名稱 (URN),它命名資源但不指定如何定位資源。上面的 mailto、news 和 isbn URI 都是 URN 的示例。 url
URI 和 URL 概念上的不一樣反映在此類和 URL 類的不一樣中。 .net
此類的實例表明由 RFC 2396 定義的語法意義上的一個 URI 引用。URI 能夠是絕對的,也能夠是相對的。對 URI 字符串按照通常語法進行解析,不考慮它所指定的方案(若是有)不對主機(若是有)執行查找,也不構造依賴於方案的流處理程序。相等性、哈希計算以及比較都嚴格地根據實例的字符內容進行定義。換句話說,一個 URI 實例和一個支持語法意義上的、依賴於方案的比較、規範化、解析和相對化計算的結構化字符串差很少。 code
做爲對照,URL 類的實例表明了 URL 的語法組成部分以及訪問它描述的資源所需的信息。URL 必須是絕對的,即它必須始終指定一個方案。URL 字符串按照其方案進行解析。一般會爲 URL 創建一個流處理程序,實際上沒法爲未提供處理程序的方案建立一個 URL 實例。相等性和哈希計算依賴於方案和主機的 Internet 地址(若是有);沒有定義比較。換句話說,URL 是一個結構化字符串,它支持解析的語法運算以及查找主機和打開到指定資源的鏈接之類的網絡 I/O 操做。orm
在Java類庫中,URI類不包含任何訪問資源的方法,它惟一的做用就是解析。視頻
相反的是,URL類能夠打開一個到達資源的流。
所以URL類只能做用於那些 Java類庫知道該如何處理的模式,
例如http:,https:,ftp:,本地文件系統(file:),和Jar文件(jar:)。
URI—Uniform Resource Identifier通用資源標誌符
Web上可用的每種資源如HTML文檔、圖像、視頻片斷、程序等都是一個來URI來定位的
URI通常由三部組成
①訪問資源的命名機制
②存放資源的主機名
③資源自身的名稱,由路徑表示,着重強調於資源。
URL—Uniform Resource Location統一資源定位符
URL是Internet上用來描述信息資源的字符串,主要用在各類WWW客戶程序和服務器程序上,特別是著名的Mosaic。
採用URL能夠用一種統一的格式來描述各類信息資源,包括文件、服務器的地址和目錄等。
URL通常由三部組成
①協議(或稱爲服務方式)
②存有該資源的主機IP地址(有時也包括端口號)
③主機資源的具體地址。如目錄和文件名等
應用:
一 、 URI
好比在JDK中sun公司提供的簡易HttpServer實現中
public void handle(final HttpExchange exchange)throws Exception
方法中,根據exchange對象能夠拿到訪問Http請求的URI對象,
ps:
http://127.0.0.1:8080/cmd_helloworld/?name=guowuxin
此時URI uri = exchange.getRequestURI();
經過uri能夠拿到鏈接的各部份內容:
uri.getPath() --------------------> /cmd_helloworld 注意有斜槓
uri.getQuery()----------------------> name=guowuxin
固然若是是post請求,請求內容在請求body當中
2、 URL
上面說了,URL 是一個結構化字符串,它支持解析的語法運算以及查找主機和打開到指定資源的鏈接之類的網絡 I/O 操做。
重要的,URL不單單能夠進行語法解析運算,還能夠查找主機,而且打開指定資源的鏈接進行網絡IO操做。
介紹URL類的兩個重要方法
openStream()
打開到此 URL 的鏈接並返回一個用於從該鏈接讀入的 InputStream。
openConnection()
返回一個 URLConnection 對象,它表示到 URL 所引用的遠程對象的鏈接。
URL url = new URL("http://www.baidu.com");
InputStream in = url.openStream();
ByteArrayOutputStream output = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while ((len = in.read(buffer)) != -1)
{
output.write(buffer, 0, len);
}
System.err.println(new String(output.toByteArray()));