官术网_书友最值得收藏!

4.4.1 URL和URI

URL和URLConnection類封裝了大量復雜的實現細節,這些細節涉及如何從遠程站點獲取信息。例如,可以自一個字符串構建一個URL對象:

如果只是想獲得該資源的內容,可以使用URL類中的openStream方法。該方法將產生一個InputStream對象,然后就可以按照一般的用法來使用這個對象了,比如用它構建一個Scanner對象:

java.net包對統一資源定位符(Uniform Resource Locator,URL)和統一資源標識符(Uniform Resource Identifier,URI)作了非常有用的區分。

URI是個純粹的語法結構,包含用來指定Web資源的字符串的各種組成部分。URL是URI的一個特例,它包含了用于定位Web資源的足夠信息。其他URI,比如

則不屬于定位符,因為根據該標識符我們無法定位任何數據。像這樣的URI我們稱之為URN(uniform resource name,統一資源名稱)。

在Java類庫中,URI類并不包含任何用于訪問資源的方法,它的唯一作用就是解析。但是,URL類可以打開一個到達資源的流。因此,URL類只能作用于那些Java類庫知道該如何處理的模式,例如http:、https:、ftp:、本地文件系統(file:)和JAR文件(jar:)。

要想了解為什么對URI進行解析并非小事一樁,那么考慮一下URL會變得多么復雜。例如,

URI規范給出了標記這些標識符的規則。一個URI具有以下句法:

上式中,[...]表示可選部分,并且:和#可以被包含在標識符內。

包含scheme:部分的URI稱為絕對URI。否則,稱為相對URI。

如果絕對URI的schemeSpecificPart不是以/開頭的,我們就稱它是不透明的。例如:

所有絕對的透明URI和所有相對URI都是分層的(hierarchical)。例如:

一個分層URI的schemeSpecificPart具有以下結構:

在這里,[...]同樣表示可選的部分。

對于那些基于服務器的URI,authority部分具有以下形式:

port必須是一個整數。

RFC 2396(標準化URI的文獻)還支持一種基于注冊表的機制,此時authority采用了一種不同的格式。不過,這種情況并不常見。

URI類的作用之一是解析標識符并將它分解成各種不同的組成部分。你可以用以下方法讀取它們:

URI類的另一個作用是處理絕對標識符和相對標識符。如果存在一個如下的絕對URI:

和一個如下的相對URI:

那么可以用它們組合出一個絕對URI:

這個過程稱為解析相對URL。

與此相反的過程稱為相對化(relativization)。例如,假設有一個基本URI:

和另一個URI:

那么相對化之后的URI就是:

URI類同時支持以下兩個操作:

主站蜘蛛池模板: 博白县| 利川市| 鄢陵县| 辛集市| 吴堡县| 西城区| 阿图什市| 繁峙县| 白玉县| 吕梁市| 叙永县| 郯城县| 库尔勒市| 泰兴市| 邛崃市| 安福县| 大足县| 紫金县| 石狮市| 广东省| 当涂县| 淮滨县| 随州市| 聂拉木县| 沂南县| 轮台县| 北流市| 平乡县| 惠来县| 托克逊县| 潞西市| 临安市| 崇明县| 松潘县| 湘阴县| 汾西县| 颍上县| 建水县| 宜君县| 太保市| 建昌县|