統一資源定位符URL(Uniform Resource Locator)是www客戶機存取Internet時用來識別資源的名字和位址。超文本鏈路由統一資源定位符URL維持。 URL的格式為:
<METHOD>://<HOSTNAME:PORT>/<PATH>/<FILE>
其中:Method是傳輸協定:HOSTNAME是文件和伺服器所在的Internet主機名稱(網域名稱系統中DNS中的點位址);PORT是服務連接埠號碼(可省略);PATH是路徑名,FILE是檔案名稱。例如:
http://www.weixueyuan.net/(http是協定名,www.weixueyuan.net是主機名稱)
http://www.weixueyuan.net/view/6079.html (www.weixueyuan.net是主機名,view/6079.html是檔案路徑和檔名)
URL類別
Java.net包有URL類,一個URL物件可以表示一個網路資源。程式利用URL物件能實現Internet尋址、網路資源的定位連線、在客戶機與伺服器之間直接存取等。 URL類別的建構方法是
URL(String s)
其中,s指出網路中的一個資源。
利用URL對象存取網路資源的方法是:先建立URL對象,如下列程式碼所示:
URL myURL;try { myURL = new URL(“http://www.weixueyuan.net:80/”);}catch(MalformedURLException e){ System.out.println(“有錯的URL:”+url+e );}
因建立URL物件可能會產生MalformedURLException異常。所以,建立URL物件的程式碼要出現在try…catch語句區塊中,以便能捕捉網址錯誤異常。
URLConnection類
要接收和發關資訊還要用URLConnection類,程式取得一個URLConnection對象,相當於完成對指定URL的一個HTTP連線。以下是示意取得URLConnection物件的程式碼。
URL mu = new URL(“http://www.sun.com/”);//先建立一個URL物件URLConnection muC = mu.openConnection();//取得URLConnection對象
上述程式碼說明,先要建立一個URL對象,然後利用URL物件的openConnection()方法,從系統取得一個URLConnection物件。程式有了URLConnection物件後,就可使用URLConnection類別提供的以下方法取得流物件和實現網路連線:
getOutputStream():取得向遠端主機傳送訊息的OutputStream流物件;
getInputStream():取得從遠端主機取得資訊的InputStream流物件。有了網路連線的輸入和輸出流,程式就可實現遠端通訊;
connect():設定網路連線。
訊息的發送和接收
傳送和接收資訊要取得流對象,並由流對象建立輸入或輸出資料流對象。然後,就可以用流的方法存取網路資源。
請參閱下方範例程式中的方法readByURL(),該方法說明已知網址讀取網頁內容的過程。方法利用網址參數創建一個URL物件url,接著利用物件url的openConnect()方法,取得URLConnection物件tc,用物件tc的connect()方法建立網路連接,接著取得網路連接的InputStreamReader類別物件in,將物件in ,轉換成為BufferedRead物件dis,改為緩衝式輸入。最後,用物件dis的readLine()方法完成讀取網路文字資料。
如同本地資料流一樣,網路資源使用結束後,資料流也應及時關閉。例如,程式碼
dis.close();
關閉先前程式碼建立的流dis。
【例】以資料流方法讀取網頁內容的應用程式。程式運行時,網址從文字方塊讀取。
import java.net.*;import java.awt.*;import java.awt.event.*;import java.io.*;import java.javax.swing.*;public class Example10_2{ public static void main(String args []){ new downNetFile(); }}class DownNetFile extends JFrame implements ActionListener{ JTextFileld infield = new JTextField(30); JTextarea showArea = new JTextArea(); JButton b = new JButton(“download”);JPanel p = new JPanel(); DownNetFile(){ super(“read network text file application”); Container con = this.getContentPane(); p.add(infield);p.add(b); JScrollPane jsp = new JScrollPane(showArea); b.addActionListener(this); con.add(p,”North”);con.add(jsp,”Center” ); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(500,400);setVisible(true); } public void actionPerformed(ActionEvent e){ readByURL(infield.getText()); } public void readByURL(String urlName){ try{ URL url = new URL(urlName);//由網址建立URL物件URLConnection tc = url.openConnectin(urlName);//由網址建立URL物件URLConnection tc = url.openConnectin(urlName);//由網址建立URL物件URLConnection tc = url.openConnectin(urlName );//取得URLConnection物件tc.connect();//設定網路連接InptStreamReader in = new InputStreamReader(tc.getInputStream()); BufferedReader dis = new BufferedReader(in);//採用緩衝式輸入String inline; while((inline = dis.readLine())!=null){ showArea.append(inline +” /n”); } dis.close();//網路資源使用結束後,資料流及時關閉}catch(MalformedURLException e){ e.printStackTrace(); } catch(IOException e){e.printStacktrace();} /*存取網路資源可能產生MalformedURLException和IOException例外*/ }}