Java高級編程-網絡編程詳解 (1) (2)

 

URL和URLConnection類

    URL是Uniform Resource Locator(統一資源定位器)的縮寫。在WWW風行後,以URL表示Internet上各種數據資源的位置,已經成爲一種標準的方式。爲了處理方便, Java將URL封裝成URL類, 我們可以用一個URL對象記錄下完整的URL信息。

    URL類爲我們提供了不同的構造方法:

public URL(String spec)
    這個構造方法用指定的URL來創建一個URL對象,比如:

try {
URL rul=new URL("http://www.sina.com.cn/***/***.html");
catch(MalformedURLException e){
……
}


     public URL(String protocol,String host,int port,String file) 該構造方法用指定的協議、主機名、端口號、文件路徑及文件名創建一個URL對象,記住file變量必須以下劃線開始。比如我們要表示URL:http: //www.ntu.edu.cn:80/local/searchresult.html
    則可以這樣表示:

try {
URL url=new URL("http","www.ntu.edu.cn",80,"/local/searchresult.html");
}
catch(MalformedURLException e) {
……
}


     public URL(String protocol, String host, String file)
    該構造方法用指定的協議、主機名、路徑及文件名創建URL對象。
    
public URL( URL contoxt, String spec)
    該構造方法用已存在的URL對象context創建URL對象。示例如下:

try{
URL base=new URL("http://www.strange.com.cn:80/x-file/1112.html");
URL loc=new URL(base , "#change");
}
catch(MalformedURLException e) {
}


    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 ==========================
2 // 程序名稱:示例12-3: Myurl.java
3 // 程序目的:熟悉URL對象的創建及使用
4 // ==============================================================
5 import java.net. *;
6 import java.io.*;
7
8 class Myurl
9 {
10 public static void main(String args[])
11 {
12 try {
13 URL url=new URL("http://www.tsinghua.edu.cn/chn/index.htm");
14 System.out.println("the Protocol: "+url.getProtocol());
15 System.out.println("the hostname: " +url.getHost());
16 System.out.println("the port: "+url.getPort());
17 System.out.println("the file:"+url.getFile());
18 System.out.println(url.toString());
19 }
20 catch(MalformedURLException e) {
21 System.out.println(e);
22 }
23 }
24 }


    【程序輸出結果】

the Protocol: http
the hostname: www.tsinghua.edu.cn
the port: -1
the file:/chn/index.htm
http://www.tsinghua.edu.cn/chn/index.htm


    【程序註解】

    在第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 =====================
2 // 程序名稱:示例12-4: URLDemo .java
3 // 程序目的:URLConnection類的用法
4 //=============================================================
5 import java.io.*;
6 import java.net.*;
7 import java.util.Date;
8
9 class URLDemo
10 {
11 public static void main(String args[]) throws Exception
12 {
13 System.out.println("starting....");
14 int c;
15 URL url=new URL("http://www.sina.com.cn");
16 URLConnection urlcon=url.openConnection();
17 System.out.println("the date is :"+new Date(urlcon.getDate()));
18 System.out.println("content_type :"+urlcon.getContentType());
19 InputStream in=rulcon.getInputStream();
20 while (((c=in.read())!=-1))
21 {
22 System.out.print((char)c);
23 }
24 in.close();
25 }
26 }


    【程序輸出結果】

starting....
the date is :Thu Mar 27 00:00:13 CST 2003
content_type :text/html
………………//網頁文件內容
//-->


    【程序註解】

    在第15行中我們實例化了一個URL,接着就通過調用URL對象的openConnection()方法返回一個 URLConnection類的對象urlcon。然後就分別調用了URLConnectin類的常用方法,返回了URL的一些基本信息。這些方法是: getDate()返回日期,getContentType()返回文件類型text/html,getInputStream()獲得輸入流,然後通過輸入流取得文件(in.read()),並在標準輸出上輸出(System.out.println()),我們看到的是一個網頁源代碼文件。在IE中我們可以查看源代碼文件,其實就是通過這種方法實現的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章