URL和URI的詳細區分(帶例項)
1說明:
這段時間寫android的時候用到了URL和URI,有點分不清楚,於是做了一個系統性的學習。在這裡將自己的學習筆記粘貼出來,希望對大家有幫助。
1)Java類庫裡有兩個對應的類java.net.URL和java.net.URI,官方的定義分別如下:
(URL)A Uniform Resource Locator thatidentifies the location of an Internet resource as specified by RFC 1738.(統一資源定位符用於標示網路資源的位置)
(URI,統一資源識別符號)A Uniform Resource Identifier
2)也就是說URI是以一種抽象的,高層次概念定義統一資源標識,而URL則是具體的資源標識的方式。URL是一種URI。
3)URL,URI具體定義方式(來自android官方文件)
URL的格式一般由下列三部分組成:
第一部分是協議(或稱為服務方式);
第二部分是存有該資源的主機IP地址(有時也包括埠號);
第三部分是主機資源的具體地址。
URI一般由三部分組成:
訪問資源的命名機制。
存放資源的主機名。
資源自身的名稱,由路徑表示。
4)在Java的URI中,一個URI例項可以代表絕對的,也可以是相對的,只要它符合URI的語法規則。而URL類則不僅符合語義,還包含了定位該資源的資訊,因此它不能是相對的,schema(protocol)必須被指定。
2舉例:
1) 大家平常用圖片的時候。到底是imgUrl好呢,還是imgUri好?顯然,如果說imgUrl是肯定沒問題的,因為即使它實際上是url,那它也是uri的一種。那麼用imgUri
有沒有問題呢?此時則要看它的可能取值,如果是絕對路徑,能夠定位的,那麼用imgUri是沒問題的,而如果是相對路徑,那還是不要用ImgUri的好。總之,用imgUrl是肯定沒問題的,而用imgUri則要視實際情況而定。
2)StringHttpServletRequest.getRequestURI();和StringBufferHttpServletRequest.getRequestURL();返回的內容有何不同?為什麼會如此?
從HttpServletRequest的javadoc中可以看出,getRequestURI返回一個String,“the part of this request’s URL from theprotocol name up to the query string in the first line of the HTTP request”,比如“POST/some/path.html?a=b HTTP/1.1”,則返回的值為”/some/path.html”。現在可以明白為什麼是getRequestURI而不是getRequestURL了,因為此處返回的是相對的路徑。而getRequestURL返回一個StringBuffer,“The returned URL contains a protocol, server name, port number, andserver path, but it does not include query string parameters.”,完整的請求資源路徑,不包括querystring。
3) URL示例
檔案的URL:用URL表示檔案時,伺服器方式用file表示,後面要有主機IP地址、檔案的存取路徑(即目錄)和檔名等資訊。有時可以省略目錄和檔名,但“/”符號不能省略。
例(3.1):file://ftp.linkwan.com/pub/files/foobar.txt
代表存放主機ftp.linkwan.com上的pub/files/目錄下的一個檔案,檔名是foobar.txt。
例(3.2):file://ftp.linkwan.com/pub
代表主機ftp.linkwan.com上的目錄/pub。
例(3.3):file://ftp.linkwan.com/
代表主機ftp.linkwan.com上的根目錄。
例(3.4):http://homepage.yesky.com/175/2603675.shtml
HTTP的URL:使用超級文字傳輸協議HTTP,提供超級文字資訊服務的資源。
其計算機域名為homepage.yesky.com。超級文字檔案(檔案型別為.shtml)是在目錄/175下的2603675.shtml。這是天極網的一臺計算機。
4) 統一資源定位器(URL)指的是Internet檔案在網上的地址。好比一個街道在城市地理上地址。URL使用數字和字母按一定順序排列以確定一個地址。比如,要是有一個人的地址是:
510665 廣州市天河科韻路18號 樑大頭
你會想到,樑大頭是一個人名,他住在廣州市天河科韻路18號,郵政編碼是510665。