天天看點

java通過URLConnection連接配接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的一種應用。