通過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的一種應用。