一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

URI和URL的區(qū)別

 且看且珍惜 2014-12-13

這兩天在寫代碼的時候,由于涉及到資源的位置,因此,需要在Java Bean中定義一些字段,用來表示資源的位置,比如:imgUrl,logoUri等等。但是,每次定義的時候,心里都很糾結(jié),是該用imgUrl還是imgUri呢?

同樣的,另外一個問題:String HttpServletRequest.getRequestURI();和StringBuffer HttpServletRequest.getRequestURL();返回的內(nèi)容有何不同?為什么會如此?

帶著這些問題到網(wǎng)上去搜了下,沒發(fā)現(xiàn)讓自己看了明白的解釋,于是,想到了Java類庫里有兩個對應的類java.net.URI和java.net.URL,終于,在這兩個類里的javadoc里找到了答案。

URIs, URLs, and URNs

首先,URI,是uniform resource identifier,統(tǒng)一資源標識符,用來唯一的標識一個資源。而URL是uniform resource locator,統(tǒng)一資源定位器,它是一種具體的URI,即URL可以用來標識一個資源,而且還指明了如何locate這個資源。而URN,uniform resource name,統(tǒng)一資源命名,是通過名字來標識資源,比如mailto:java-net@java.sun.com。也就是說,URI是以一種抽象的,高層次概念定義統(tǒng)一資源標識,而URL和URN則是具體的資源標識的方式。URL和URN都是一種URI。

在Java的URI中,一個URI實例可以代表絕對的,也可以是相對的,只要它符合URI的語法規(guī)則。而URL類則不僅符合語義,還包含了定位該資源的信息,因此它不能是相對的,schema必須被指定。

ok,現(xiàn)在回答文章開頭提出的問題,到底是imgUrl好呢,還是imgUri好?顯然,如果說imgUri是肯定沒問題的,因為即使它實際上是url,那它也是uri的一種。那么用imgUrl有沒有問題呢?此時則要看它的可能取值,如果是絕對路徑,能夠定位的,那么用imgUrl是沒問題的,而如果是相對路徑,那還是不要用ImgUrl的好??傊?,用imgUri是肯定沒問題的,而用imgUrl則要視實際情況而定。

第二個,從HttpServletRequest的javadoc中可以看出,getRequestURI返回一個String,“the part of this request’s URL from the protocol 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”?,F(xiàn)在可以明白為什么是getRequestURI而不是getRequestURL了,因為此處返回的是相對的路徑。而getRequestURL返回一個StringBuffer,“The returned URL contains a protocol, server name, port number, and server path, but it does not include query string parameters.”,完整的請求資源路徑,不包括querystring。

總結(jié)一下:URL是一種具體的URI,它不僅唯一標識資源,而且還提供了定位該資源的信息。URI是一種語義上的抽象概念,可以是絕對的,也可以是相對的,而URL則必須提供足夠的信息來定位,所以,是絕對的,而通常說的relative URL,則是針對另一個absolute URL,本質(zhì)上還是絕對的。

注:這里的絕對(absolute)是指包含scheme,而相對(relative)則不包含scheme。

URI抽象結(jié)構(gòu)     [scheme:]scheme-specific-part[#fragment]

[scheme:][//authority][path][?query][#fragment]

authority為[user-info@]host[:port]

參考資料:

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

ps:

java.net.URL類不提供對標準RFC2396規(guī)定的特殊字符的轉(zhuǎn)義,因此需要調(diào)用者自己對URL各組成部分進行encode。而java.net.URI則會提供轉(zhuǎn)義功能。因此The recommended way  to manage the encoding and decoding of URLs is to use  java.net.URI. 可以使用URI.toURL()和URL.toURI()方法來對兩個類型的對象互相轉(zhuǎn)換。對于HTML FORM的url encode/decode可以使用java.net.URLEncoder和java.net.URLDecoder來完成,但是對URL對象不適用。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产成人亚洲欧美二区综| 亚洲中文字幕三区四区| 国产国产精品精品在线| 在线懂色一区二区三区精品| 99久久国产精品免费| 十八禁日本一区二区三区| 少妇肥臀一区二区三区| 国产内射一级一片内射高清| 中文字幕日韩欧美亚洲午夜| 日韩欧美好看的剧情片免费| 亚洲中文在线中文字幕91| 好吊日成人免费视频公开| 亚洲性日韩精品一区二区| 好吊妞在线免费观看视频| 亚洲伦片免费偷拍一区| 97人妻精品一区二区三区免| 永久福利盒子日韩日韩| 欧美一区二区三区十区| 精品人妻av区波多野结依| 亚洲av首页免费在线观看| 亚洲国产精品无遮挡羞羞| 大香蕉网国产在线观看av| 欧美同性视频免费观看| 久久精品中文扫妇内射| 中国黄色色片色哟哟哟哟哟哟| 日本精品中文字幕在线视频| 欧美性高清一区二区三区视频| 国产日韩中文视频一区| 午夜福利视频日本一区| 日本一二三区不卡免费| 精品丝袜一区二区三区性色| 亚洲欧洲一区二区中文字幕| 亚洲精品伦理熟女国产一区二区| 久久国产亚洲精品赲碰热| 欧美久久一区二区精品| 久热久热精品视频在线观看 | 婷婷伊人综合中文字幕| av在线免费观看在线免费观看 | 午夜资源在线观看免费高清| 国产日产欧美精品视频| 午夜精品福利视频观看|