在對openConnection()的調用返回後
調用了connect()方法
用於建立某種資源的連接
(盡管openConnection()方法返回一個連接對象的引用
但是openConnection()不會連接到資源)
URLConnection的getHeaderFields()方法返回一個對象的應用
該對象的類實現了java
util
Map接口
該圖表(map)包含頭部名稱和值的集合
什麼是頭部(header)?頭部是基於文本的名稱/值對
它識別資源數據的類型
數據的長度等等
在編譯了URLDemo
後
在命令行輸入java URLDemo
輸出如下
Date=[Sun
Feb
:
:
GMT]
Connection=[Keep
Alive]
Content
Type=[text/html; charset=iso
]
Accept
Ranges=[bytes]
Content
Length=[
]
ull=[HTTP/
OK]
ETag=[
e
c
e
bf
d
a
]
Keep
Alive=[timeout=
max=
]
Server=[Apache/
(Unix) Debian/GNU]
Last
Modified=[Wed
Nov
:
:
GMT]
Input allowed = true
Output allowed = false
上面的輸出識別了很多頭部(包括Date
null
Content
Length
Server
Last
Modified等等)和它們的值
輸出也顯示只允許從資源讀取數據
你對一個程序是如何識別資源數據的是否感到驚奇?仔細看一下前面的輸出
你會看到叫做Content
Type的東西
Content
Type是一個頭部
它識別了資源數據(內容)的類型是text/html
text部分就是我們所知道的類型
html部分是我們所知道的子類型
(如果內容是普通的文本
Content
Type的值可能是text/plain
上面的類型表明內容是文本的但不是沒有格式的)
Content
Type頭部是我們所知道的多用途Internet郵件擴展(MIME)的一部分
MIME是傳統的傳輸消息的
位ASCII標准的一種擴展
通過引入了多種頭部
MIME使視頻
聲音
圖像
不同字符集的文本與
位ASCII結合起來
有了Content
Type
MIME可以識別Content
Length和其它標准的頭部
當你使用URLConnection類的時候
你會遇到getContentType()和getContentLength()
這些方法返回的值是Content
Type和Content
Length頭部
你也許聽說過HTML窗體(<form>
</form>)和其它的HTML標記
窗體使我們能夠從某種資源得到(GET)數據並按後來的處理把HTML窗體的字段數據發送(POST)到某種資源
你能夠使用URLConnection類和MIME模擬可以得到和發送數據的HTML窗體
下面說明你怎樣完成這種事務
假設你想把窗體數據發送(POST)到某個服務器程序
發送需要對窗體數據的操作
首先
窗體的數據必須組織為名稱/值對(name/value pair)
其次每個對必須指定為name=value格式
再次如果發送多個名稱/值對
必須使用 & 符號把每對分開
最後的name內容和value的內容必須使用application/x
www
form
urlencoded MIME類型編碼
例如x=y&a=b表現了兩個名稱/值對
x/y和a/b
為了輔助編碼
Java提供了
URLEncoder類
它聲明了一對靜態的encode()方法
每個方法有一個String參數並返回包含已編碼的參數內容的String對象的引用
例如
如果encode()發現參數中有空格
它在結果中用加號代替空格
下面的代碼片斷演示了調用URLEncoder的encode(String s)方法
對a 空格 b字符串進行編碼
結果a+b存儲在一個新的String對象中
result引用它
String result = URLEncoder
encode (
a b
);
作為准備窗體數據的補充
必須告訴URLConnection對象數據已經被發送了
因為URLConnection默認的操作是獲取數據
為了完成這種事務
你可以首先把openConnection()的返回值轉換為HttpURLConnection類型(在確保該返回值的類型正確後)
接著調用結果對象的setRequestMethod(String method)方法
把POST作為method參數引用的對象的值
另一個必須完成的事務是調用URLConnection的setDoOutput(boolean doOutput)方法
其參數的值必須為true
這種事務是必要的
因為URLConnection對象在默認情況下不支持輸出
(接著程序最終可以調用URLConnection的getOutputStream()方法
為發送的窗體數據返回一個資源的輸出流的引用)
From:http://tw.wingwit.com/Article/program/Java/hx/201311/11144.html