URLConnection是一個抽象類,表示指向URL指定資源的活動鏈接java
有兩個不一樣但相關的用途:瀏覽器
一、與URL類相比,他對服務器的交互提供了更多的控制,能夠檢查服務器發送的首部服務器
並響應地作出響應,能夠設置客戶端中請求中使用的首部字段,能夠用POST、PUT和其餘請求方法向服務器發回數據函數
二、是Java的協議處理器的機制的一部分,這個機制還包括URLStreamHandler編碼
協議處理器的思想:將 處理協議的細節與處理特定數據類型分開,提供相應的用戶接口,完成整個WEB瀏覽器所完成的其餘操做spa
基類java.net.URLConnection是抽象類,要實現一個特定的協議,就要編寫一個子類,這些子類能夠在運行時由應用程序加載.net
使用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........
能夠用來獲取表示日期的首部字段(Expires、Date、Last-modified首部)
爲了將字符串轉換爲整數
getHeaderFieldDate()使用了java.util.Date的parseDate()方法
parseDate()方法在理解和轉換大多數常見日期格式上很是好
若是parseDate()不理解這個日期或者getHeaderFieldDate()沒法找到請求所請求的首部字段,就會返回default參數
可使用java.util.Date類將long轉換爲String類型
五、getHeaderFieldInt(String name,int default)
這個方法獲取首部字段name的值,嘗試將其轉換爲int
失敗緣由:多是沒法找到鎖清秋的首部字段,也可能由於該字段不包含一個可識別的整數,就會返回default默認值