天天看點

Android URI和URL和URN的差別

問題:

問題1.定義的時候是該用imgUrl還是imgUri呢?

問題2.String HttpServletRequest.getRequestURI();和StringBuffer HttpServletRequest.getRequestURL();傳回的内容有何不同呢?

分析:

Java類庫裡有兩個對應的類java.net.URI和java.net.URL

URI是uniform resource identifier,統一資源辨別符,用來唯一的辨別一個資源。

URL是uniform resource locator,統一資源定位器,它是一種具體的URI,即URL可以用來辨別一個資源,而且還指明了如何locate這個資源。

URN是uniform resource name,統一資源命名,是通過名字來辨別資源,比如mailto:[email protected]。

總結:也就是說,URI是以一種抽象的,高層次概念定義統一資源辨別,而URL和URN則是具體的資源辨別的方式,URL和URN都是一種URI。

NOTE:在Java的URI中,一個URI執行個體可以代表絕對的,也可以是相對的,隻要它符合URI的文法規則。而URL類則不僅符合語義,還包含了定位該資源的資訊,是以它不能是相對的,schema必須被指定。

回答:

回答問題1:用imgUri是肯定沒問題的,而用imgUrl則要視實際情況而定(如果是絕對路徑,能夠定位的,那麼用imgUrl是沒問題的,而如果是相對路徑,那還是不要用ImgUrl的好)。

回答問題2:如果大家看懂了也就明白getRequestURI() 和 getRequestURL()擷取的内容的差別呢。getRequestURI()擷取的是相對的路徑,getRequestURL()擷取的是完整的路徑。

java.net.URL類不提供對标準RFC2396規定的特殊字元的轉義,是以需要調用者自己對URL各組成部分進行encode。java.net.URI則會提供轉義功能可以使用URI.toURL()和URL.toURI()方法來對兩個類型的對象互相轉換。Html的url可以使用java.net.URLEncoder和java.net.URLDecoder來完成

參考資料(文檔)

http://docs.oracle.com/javase/1.5.0/docs/api/java/net/URI.html

http://en.wikipedia.org/wiki/Uniform_Resource_Identifier

http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html

URLEncoder.encode和URLDecoder.decode深入分析:

URLEncoder和URLDecoder的關系,就像是加密和解密的關系。URLEncoder是轉碼,URLDecoder是解碼。中文在一些情況下是亂碼,需要轉碼。此時需要使用URLEncoder轉碼,一般是轉成%AB%FG%UF(這個隻是例子)這樣的形式。而讀取的時候需要從%AB%FG%UF這種形式解碼成正常的中文,此時使用URLDecoder。

Uri.decode和Uri.encode深入分析:

參考資料: http://blog.csdn.net/caowenbin/article/details/8461598

encode:将string編碼,會将“:”“/”"?""#"等特殊符号按照特定規則編碼。這樣做的可能是系統需要,比如下面要說的資料分段

decode:将資料解碼,和encode是對應的

URL Decoder/Encoder轉換工具:http://meyerweb.com/eric/tools/dencoder/

繼續閱讀