問題: 問題1.定義的時候是該用imgUrl還是imgUri呢? 問題2.String HttpServletRequest.getRequestURI();和StringBuffer HttpServletRequest.getRequestURL();返回的內(nèi)容有何不同呢? 分析:Java類庫里有兩個對應(yīng)的類java.NET.URI和java.Net.URL URI是uniform resource identifier,統(tǒng)一資源標(biāo)識符,用來唯一的標(biāo)識一個資源。URL是uniform resource locator,統(tǒng)一資源定位器,它是一種具體的URI,即URL可以用來標(biāo)識一個資源,而且還指明了如何locate這個資源。 URN是uniform resource name,統(tǒng)一資源命名,是通過名字來標(biāo)識資源,比如mailto:java-net@java.sun.com。總結(jié):也就是說,URI是以一種抽象的,高層次概念定義統(tǒng)一資源標(biāo)識,而URL和URN則是具體的資源標(biāo)識的方式,URL和URN都是一種URI。 NOTE:在Java的URI中,一個URI實例可以代表絕對的,也可以是相對的,只要它符合URI的語法規(guī)則。而URL類則不僅符合語義,還包含了定位該資源的信息,因此它不能是相對的,schema必須被指定。 回答:回答問題1:用imgUri是肯定沒問題的,而用imgUrl則要視實際情況而定(如果是絕對路徑,能夠定位的,那么用imgUrl是沒問題的,而如果是相對路徑,那還是不要用ImgUrl的好)。 回答問題2:如果大家看懂了也就明白getRequestURI() 和 getRequestURL()獲取的內(nèi)容的區(qū)別呢。getRequestURI()獲取的是相對的路徑,getRequestURL()獲取的是完整的路徑。 java.net.URL類不提供對標(biāo)準(zhǔn)RFC2396規(guī)定的特殊字符的轉(zhuǎn)義,因此需要調(diào)用者自己對URL各組成部分進行encode。java.net.URI則會提供轉(zhuǎn)義功能可以使用URI.toURL()和URL.toURI()方法來對兩個類型的對象互相轉(zhuǎn)換。Html的url可以使用java.net.URLEncoder和java.net.URLDecoder來完成 參考資料(文檔) http://docs.oracle.com/javase/1.5.0/docs/api/java/net/URI.html http://en./wiki/Uniform_Resource_Identifier http://docs.oracle.com/javaee/5/api/javax/servlet/http/HttpServletRequest.html
URLEncoder.encode和URLDecoder.decode深入分析: URLEncoder和URLDecoder的關(guān)系,就像是加密和解密的關(guān)系。URLEncoder是轉(zhuǎn)碼,URLDecoder是解碼。中文在一些情況下是亂碼,需要轉(zhuǎn)碼。此時需要使用URLEncoder轉(zhuǎn)碼,一般是轉(zhuǎn)成%AB%FG%UF(這個只是例子)這樣的形式。而讀取的時候需要從%AB%FG%UF這種形式解碼成正常的中文,此時使用URLDecoder。
Uri.decode和Uri.encode深入分析: 參考資料:http://blog.csdn.net/caowenbin/article/details/8461598encode:將string編碼,會將“:”“/”"?""#"等特殊符號按照特定規(guī)則編碼。這樣做的可能是系統(tǒng)需要,比如下面要說的數(shù)據(jù)分段 decode:將數(shù)據(jù)解碼,和encode是對應(yīng)的
URL Decoder/Encoder轉(zhuǎn)換工具:http:///eric/tools/dencoder/ |
|