天天看點

網絡基礎 URL

一、用JAVA實作URL 

  在JAVA中,Java.net包裡面的類是進行網絡程式設計的,其中java.net.URL類和java.net.URLConection類使程式設計者友善地利用URL在Internet上進行網絡通信。

1、建立URL對象

  URL類有多種形式的構造函數:

package com.my.socket;

import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;

public class ScocketTestt {

    public static void main(String[] args) throws UnknownHostException, MalformedURLException {
    
        //(1) URL ( String url)
        //url代表一個絕對位址,URL對象直接指向這個資源,如:
        URL urll1=new URL("http://www.cqwu.edu.cn");

        //(2) URL ( URL baseURL , String relativeURL)
        //其中,baseURL代表絕對位址,relativeURL代表相對位址。如:
        URL urll2 = new URL("http://www.cqwu.edu.cn");
        URL lib1 = new URL(urll2 , "library / library.asp");

        //(3) URL ( String protocol , String host , String file)
        //其中,protocol代表通信協定,host代表主機名,file代表檔案名。如:
        new URL ("http" , "www.cqwu.edu.cn", "/ test / test.asp");

        //(4) URL ( String protocol , String host , int port , String file)
        URL lib2 = new URL ("http" , "www.cqwu.edu.cn", 80 , "/ test / test.asp");                                

    }

}      

2、擷取URL對象的屬性

  getDefaultPort(): 傳回預設的端口号。

  getFile(): 獲得URL指定資源的完整檔案名。

  getHost(): 傳回主機名。

  getPath(): 傳回指定資源的檔案目錄和檔案名。

  getPort(): 傳回端口号,預設為-1。

  getProtocol(): 傳回表示URL中協定的字元串對象。

  getRef(): 傳回URL中的HTML文檔标記,即#号标記。

  getUserInfo: 傳回使用者資訊。

  toString: 傳回完整的URL字元串。

url1.getHost();//擷取主機
        url1.getPort();//如果沒有指定端口号,根據協定不同使用預設端口。此時getPort()方法的傳回值為 -1
        url1.getPath();//擷取檔案路徑
        url1.getFile();//檔案名,包括檔案路徑+參數
        url1.getRef();//相對路徑,就是錨點,即#号後面的内容
        url1.getQuery();//查詢字元串,即參數      

有兩種方法可以用來通路Internet。一是利用URL類的openStream()方法;二是使用openConnection()方法建立一個URLConnection類的對象。

其中,方法openStream()與指定的URL建立連接配接并傳回InputStream類的對象,以從這一連接配接中讀取資料。

//使用URL讀取網頁内容
//建立一個URL執行個體
URL url =new URL("http://www.baidu.com");
InputStream is = url.openStream();//通過openStream方法擷取資源的位元組輸入流
InputStreamReader isr =newInputStreamReader(is,"UTF-8");//将位元組輸入流轉換為字元輸入流,如果不指定編碼,中文可能會出現亂碼
BufferedReader br =newBufferedReader(isr);//為字元輸入流添加緩沖,提高讀取效率
String data = br.readLine();//讀取資料
while(data!=null){
System.out.println(data);//輸出資料
data = br.readerLine();
}
br.close();
isr.colose();
is.close();      

上例首先建立URL對象url,并在其基礎上打開輸入流擷取InputStreamReader對象,再由此對象建立BufferedReader對象br,從br中讀取資料即可得到url所指定的資源檔案。

  上面的openStream()方法隻能讀取網絡資源,若要既能讀取又能發送資料,則要用到URL類的openConnection()方法來建立一個 URLConnection類的對象,此對象在本地機和URL指定的遠端節點建立一條HTTP協定的資料通道,可進行雙向資料傳輸。

  類URLConnection提供了很多設定和擷取連接配接參數的方法,最常用到的是getInputStream()和getOutputStream()方法,如:

  URL sum=new URL("http://java.sum.com/cgi-bin/backwards");

  URLConnection suncon=buaa.openConnection();

  sumcon.setDoOutput(true);

  DataInputStream dis=new DataInputStream(suncon.getInputStream());

  PrintStream ps=new PrintStream(suncon.getOutputStream());

  String str=dis.readLine();

  ps.println("來自客戶機的資訊:.......");