五、URLConnection(1)

 

URLConnection是一個抽象類,表示指向URL指定資源的活動鏈接java

有兩個不一樣但相關的用途:瀏覽器

一、與URL類相比,他對服務器的交互提供了更多的控制,能夠檢查服務器發送的首部服務器

   並響應地作出響應,能夠設置客戶端中請求中使用的首部字段,能夠用POST、PUT和其餘請求方法向服務器發回數據函數

二、是Java的協議處理器的機制的一部分,這個機制還包括URLStreamHandler編碼

  協議處理器的思想:將 處理協議的細節與處理特定數據類型分開,提供相應的用戶接口,完成整個WEB瀏覽器所完成的其餘操做spa

  基類java.net.URLConnection是抽象類,要實現一個特定的協議,就要編寫一個子類,這些子類能夠在運行時由應用程序加載.net

 

 

打開URLConnection

使用URLConnection類的程序遵循如下幾個基本步驟:3d

跳過步驟3:某種URL的默認設置是能夠接收的對象

跳過步驟4:只須要服務器的數據,不關心任何元信息或者協議不提供任何元信息blog

跳過步驟6:只但願接收服務器數據,而不想服務器發送數據

 

URLConnection類僅有一個構造函數爲保護類型

 

除非派生URLConnection的子類來處理新的URL類型

不然經過調用URL類的openConnection()方法來建立一個對象 

 

 

 URLConnection類聲明爲抽象類

必須由子類實現的一個方法是connect()創建與服務器的鏈接,顧依賴服務類型(HTTP、FTP等)

 

讀取服務器的數據

URLConnection對象從一個URL獲取所須要的代碼的步驟:

 

 getiInputStream()返回一個通用的InputStream對象能夠讀取和解析服務器發送的數據

打印結果:

 

URL和URLConnection之間的不一樣:

 

讀取首部

HTTP服務器在每一個相應前面的首部中都提供了大量信息

 

HTTP首部可能包括請求文檔的內容類型、文檔長度、對內容的編碼所採用的字符集、日期時間

內容過時時間以及最後修改日期等

具體的信息依賴於服務器

 

獲取指定的首部字段

能夠得到請求中特定的經常使用字段:

 

一、getContentType()

返回相應主體中的MIME內容類型

依賴於Web服務器發送的一個有效內容類型

若是沒有提供內容類型,不會拋異常,返回null

 

二、getContentLength()

返回內容中有多少字節

若是沒有Content-length首部,就會返回-1

這個方法不會拋異常

若是須要準確的知道跑讀取的字節數

或者須要預先建立一個足夠大的緩衝區來保存數據可使用這個方法

 

 

 

三、getContentEncoding()

指定內容容是如何編碼的

若是發送的內容沒有編碼就會返回null,不拋異常

 

 

Web上最經常使用的內容編碼方式多是x-gzip

可使用java.util.zip.GZipInputStream直接解碼

 

四、getDate()

 

返回一個long

指定文檔什麼時候發送,這個時間按格林尼治時間(GMT)1970年1月1日子夜過去了多少毫秒來給出

能夠轉爲java.util.Date

若是HTTP首部不包括Date字段、getDate()返回0

 

五、getExpiration()

基於服務器的過時時間

指示應合適從緩衝區刪除文檔

並從服務器從新下載

 

與getDate()方式相似,區別在於如何解析返回的值

返回一個long,指示自GMT 1970年1月1日子夜12:00後的毫秒數

文檔在這一時刻過時

文檔中不包含Expiration字段則返回爲0

表示文檔永久不過時

 

 

六、getLastModified()

返回文檔最後的修改日期

依舊是GMT....

若是HTTP首部沒有包括Last-modified字段返回爲0

 

 獲取任意首部字段

一、getHeaderField(String name)

返回指定首部字段的值

首部不區分大小寫,也不包括結束冒號

能夠獲得Date、Content-length、Expires首部

只要將name值傳入便可

 

這些方法返回的都是String

 

二、getHeaderFieldKey(int n)

返回第n個首部字段的鍵(字段名)

請求方法 自己是第0個首部,它的鍵位null

第一個首部即編號位1

 

 三、getHeaderField(int n)

 

返回第n個首部字段的值

 

 

四、getHeaderFieldDate(String name,long default)

首先獲取由name參數指定的首部字段

而後嘗試將這個字符串轉換爲一個long

指示自GMT........

能夠用來獲取表示日期的首部字段(ExpiresDateLast-modified首部)

 爲了將字符串轉換爲整數

getHeaderFieldDate()使用了java.util.Date的parseDate()方法

parseDate()方法在理解和轉換大多數常見日期格式上很是好

若是parseDate()不理解這個日期或者getHeaderFieldDate()沒法找到請求所請求的首部字段,就會返回default參數

 

 可使用java.util.Date類將long轉換爲String類型

 

 五、getHeaderFieldInt(String name,int default)

這個方法獲取首部字段name的值,嘗試將其轉換爲int

失敗緣由:多是沒法找到鎖清秋的首部字段,也可能由於該字段不包含一個可識別的整數,就會返回default默認值

 

相關文章
相關標籤/搜索