基於URL的高層次Java網絡編程

基於URL的高層次Java網絡編程

8.2.1一致資源定位器URL

URL(Uniform Resource Locator)是一致資源定位器的簡稱,它表示Internet上某一資源的地址。通過URL我們可以訪問Internet上的各種網絡資源,比如最常見的WWW,FTP站點。瀏覽器通過解析給定的URL可以在網絡上查找相應的文件或其他資源。

8.2.2 URL的組成

protocol://resourceName
  協議名(protocol)指明獲取資源所使用的傳輸協議,如http、ftp、gopher、file等,資源名(resourceName)則應該是資源的完整地址,包括主機名、端口號、文件名或文件內部的一個引用。例如:
  http://www.sun.com/ 協議名://主機名
  http://home.netscape.com/home/welcome.html 協議名://機器名+文件名
  http://www.gamelan.com:80/Gamelan/network.html#BOTTOM 協議名://機器名+端口號+文件名+內部引用.

8.2.3 創建一個URL

爲了表示URL, java.net中實現了類URL。我們可以通過下面的構造方法來初始化一個URL對象:
  (1) public URL (String spec);
     通過一個表示URL地址的字符串可以構造一個URL對象。
     URL urlBase=new URL("http://www. 263.net/")
  (2) public URL(URL context, String spec);
     通過基URL和相對URL構造一個URL對象。
     URL net263=new URL ("http://www.263.net/");
     URL index263=new URL(net263, "index.html")
  (3) public URL(String protocol, String host, String file);
     new URL("http", "www.gamelan.com", "/pages/Gamelan.net. html");
  (4) public URL(String protocol, String host, int port, String file);
     URL gamelan=new URL("http", "www.gamelan.com", 80, "Pages/Gamelan.network.html");

  注意:類URL的構造方法都聲明拋棄非運行時例外(MalformedURLException),因此生成URL對象時,我們必須要對這一例外進行處理,通常是用try-catch語句進行捕獲。格式如下:

try{
     URL myURL= new URL(…)
  }catch (MalformedURLException e){
  …  }

8.2.4 解析一個URL

一個URL對象生成後,其屬性是不能被改變的,但是我們可以通過類URL所提供的方法來獲取這些屬性:
   public String getProtocol() 獲取該URL的協議名。
   public String getHost() 獲取該URL的主機名。
   public int getPort() 獲取該URL的端口號,如果沒有設置端口,返回-1。
   public String getFile() 獲取該URL的文件名。
   public String getRef() 獲取該URL在文件中的相對位置。
   public String getQuery() 獲取該URL的查詢信息。
   public String getPath() 獲取該URL的路徑
   public String getAuthority() 獲取該URL的權限信息
   public String getUserInfo() 獲得使用者的信息
    public String getRef() 獲得該URL的錨

8.2.5 從URL讀取WWW網絡資源

當我們得到一個URL對象後,就可以通過它讀取指定的WWW資源。這時我們將使用URL的方法openStream(),其定義爲:
         InputStream openStream();
  
  方法openSteam()與指定的URL建立連接並返回InputStream類的對象以從這一連接中讀取數據。
  public class URLReader {
  public static void main(String[] args) throws Exception {
                      //聲明拋出所有例外
    URL tirc = new URL("http://www.tirc1.cs.tsinghua.edu.cn/");
                      //構建一URL對象
    BufferedReader in = new BufferedReader(new InputStreamReader(tirc.openStream()));
    //使用openStream得到一輸入流並由此構造一個BufferedReader對象
    String inputLine;
    while ((inputLine = in.readLine()) != null)
                 //從輸入流不斷的讀數據,直到讀完爲止
       System.out.println(inputLine); //把讀入的數據打印到屏幕上
    in.close(); //關閉輸入流
  }
  }

8.2.6 通過URLConnetction連接WWW

通過URL的方法openStream(),我們只能從網絡上讀取數據,如果我們同時還想輸出數據,例如向服務器端的CGI程序發送一些數據,我們必須先與URL建立連接,然後才能對其進行讀寫,這時就要用到類URLConnection了。CGI是公共網關接口(Common Gateway Interface)的簡稱,它是用戶瀏覽器和服務器端的應用程序進行連接的接口,有關CGI程序設計,請讀者參考有關書籍。
  類URLConnection也在包java.net中定義,它表示Java程序和URL在網絡上的通信連接。當與一個URL建立連接時,首先要在一個URL對象上通過方法openConnection()生成對應的URLConnection對象。例如下面的程序段首先生成一個指向地址http://edu.chinaren.com/index.shtml的對象,然後用openConnection()打開該URL對象上的一個連接,返回一個URLConnection對象。如果連接過程失敗,將產生IOException.
  Try{
    URL netchinaren = new URL ("http://edu.chinaren.com/index.shtml");
    URLConnectonn tc = netchinaren.openConnection();
  }catch(MalformedURLException e){ //創建URL()對象失敗
  …
  }catch (IOException e){ //openConnection()失敗
  …
  }
  類URLConnection提供了很多方法來設置或獲取連接參數,程序設計時最常使用的是getInputStream()和getOurputStream(),其定義爲:
     InputSteram getInputSteram();
     OutputSteram getOutputStream();
  通過返回的輸入/輸出流我們可以與遠程對象進行通信。看下面的例子:
  URL url =new URL ("http://www.javasoft.com/cgi-bin/backwards");
  //創建一URL對象
  URLConnectin con=url.openConnection();
  //由URL對象獲取URLConnection對象
  DataInputStream dis=new DataInputStream (con.getInputSteam());
  //由URLConnection獲取輸入流,並構造DataInputStream對象
  PrintStream ps=new PrintSteam(con.getOutupSteam());
  //由URLConnection獲取輸出流,並構造PrintStream對象
  String line=dis.readLine(); //從服務器讀入一行
  ps.println("client…"); //向服務器寫出字符串 "client…"
    其中backwards爲服務器端的CGI程序。實際上,類URL的方法openSteam()是通過URLConnection來實現的。它等價於
    openConnection().getInputStream();
  基於URL的網絡編程在底層其實還是基於下面要講的Socket接口的。WWW,FTP等標準化的網絡服務都是基於TCP協議的,所以本質上講URL編程也是基於TCP的一種應用.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章