- Java核心技術·卷Ⅱ:高級特性(原書第10版)
- (美)凱S.霍斯特曼
- 850字
- 2020-10-30 18:10:57
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類同時支持以下兩個操作:

- iOS Game Programming Cookbook
- .NET之美:.NET關鍵技術深入解析
- Moodle Administration Essentials
- Redis Applied Design Patterns
- Web Application Development with MEAN
- Web Development with MongoDB and Node(Third Edition)
- Android移動開發案例教程:基于Android Studio開發環境
- JavaScript程序設計(第2版)
- Python商務數據分析(微課版)
- Greenplum構建實時數據倉庫實踐
- Mastering OpenStack
- Learning Cocos2d-JS Game Development
- Python計算機視覺與深度學習實戰
- Java語言程序設計實用教程(第2版)
- 陪孩子像搭積木一樣學編程:Python真好玩+Scratch趣味編程(全2冊)