URL和URLConnection類
URL是Uniform Resource Locator(統一資源定位器)的縮寫。在WWW風行後,以URL表示Internet上各種數據資源的位置,已經成爲一種標準的方式。爲了處理方便, Java將URL封裝成URL類, 我們可以用一個URL對象記錄下完整的URL信息。
URL類爲我們提供了不同的構造方法:
這個構造方法用指定的URL來創建一個URL對象,比如:
try {
|
public URL(String protocol,String host,int port,String file) 該構造方法用指定的協議、主機名、端口號、文件路徑及文件名創建一個URL對象,記住file變量必須以下劃線開始。比如我們要表示URL:http: //www.ntu.edu.cn:80/local/searchresult.html
則可以這樣表示:
try {
|
public URL(String protocol, String host, String file)
該構造方法用指定的協議、主機名、路徑及文件名創建URL對象。
public URL( URL contoxt, String spec)
該構造方法用已存在的URL對象context創建URL對象。示例如下:
try{
|
URL類中一些很基本的方法如下:
public final Obect getContent() 這個方法取得傳輸協議。
public String getFile() 這個方法取得資源的文件名。
public String getHost() 這個方法取得機器的名稱。
public int getPort() 這個方法取得端口號。
public String getProtocol() 這個方法取得傳輸協議。
public String toString() 這個方法把URL轉化爲字符串。
1 實例:URL對象的創建及使用
下面我們舉例介紹URL對象的創建及使用,見示例12-3。
【程序源代碼】
1 // ==================== Program Description ==========================
|
【程序輸出結果】
the Protocol: http
|
【程序註解】
在第13行先實例化一個URL對象url,然後在第14~18行分別調用了URL對象的一些基本方法:getProtocol ()、getHost()、getPort()和getFile(),分別取得了與URL相應的協議、主機名、端口和文件。如果URL地址不對,在第21 行拋出MalformedURLException異常。
URLConnection是一個抽象類,代表與URL指定的數據源的動態連接,URLConnection類提供比URL類更強的服務器交互控制。URLConnection允許用POST或PUT和其他HTTP請求方法將數據送回服務器。在java.net包中只有抽象的 URLConnection類,其中的許多方法和字段與單個構造器一樣是受保護的,這些方法只可以被URLConnection類及其子類訪問。
使用URLConnection 對象的一般方法如下:
(1)創建一個URL對象。
(2)調用URL對象的openConnection()方法創建這個URL的URLConnection對象。
(3)配置URLConnection。
(4)讀首部字段。
(5)獲取輸入流並讀數據。
(6)獲取輸出流並寫數據。
(7)關閉連接。
當然我們並不需要完成所有這些步驟。比如我們可以接受URL類的默認設置,則可以不設置URLConnection;還有我們有時僅僅需要從服務器讀取數據,並不需要向服務器發送數據,則我們就可以省去獲取輸出流並寫數據這一步。
當創建URLConnection對象後,我們可以使用URLConnection對象的操作方法:
public int getContentLength() 獲得文件的長度。
public String getContentType() 獲得文件的類型。
public long getDate() 獲得文件創建的時間。
public long getLastModified() 獲得文件最後修改的時間。
public InputStream getInputStream() 獲得輸入流,以便讀取文件的數據。
如果URL類的構造函數的參數有問題,比如字符內容不符合URL位置表示法的規定、指定的傳輸協議不是Java所能接受時,那麼構造函數就會拋出MalformedURLException異常,這時一定要用try 和catch語句處理。
2 實例:使用URLConnection從Web服務器讀取文件
接下來,我們用上面的方法從Web服務器上讀取文件的信息,將文件的信息打印到屏幕。見示例12-4。
【程序源代碼】
1 // ==================== Program Description =====================
|
【程序輸出結果】
starting....
|
【程序註解】
在第15行中我們實例化了一個URL,接着就通過調用URL對象的openConnection()方法返回一個 URLConnection類的對象urlcon。然後就分別調用了URLConnectin類的常用方法,返回了URL的一些基本信息。這些方法是: getDate()返回日期,getContentType()返回文件類型text/html,getInputStream()獲得輸入流,然後通過輸入流取得文件(in.read()),並在標準輸出上輸出(System.out.println()),我們看到的是一個網頁源代碼文件。在IE中我們可以查看源代碼文件,其實就是通過這種方法實現的。