熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

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

2013-11-23 19:10:32  來源: Java核心技術 
    一致資源定位器URL
    URL(Uniform Resource Locator)是一致資源定位器的簡稱它表示Internet上某一資源的地址通過URL我們可以訪問Internet上的各種網絡資源比如最常見的WWWFTP站點浏覽器通過解析給定的URL可以在網絡上查找相應的文件或其他資源
    URL的組成
    protocol://resourceName
    協議名(protocol)指明獲取資源所使用的傳輸協議如httpftpgopherfile等資源名(resourceName)則應該是資源的完整地址包括主機名端口號文件名或文件內部的一個引用例如
    協議名//主機名
    協議名//機器名+文件名
    協議名//機器名+端口號+文件名+內部引用
    創建一個URL
    為了表示URL 中實現了類URL我們可以通過下面的構造方法來初始化一個URL對象
    () public URL (String spec)
    通過一個表示URL地址的字符串可以構造一個URL對象
    URL urlBase=new URL( /
    () public URL(URL context String spec)
    通過基URL和相對URL構造一個URL對象
    URL net=new URL (
    URL index=new URL(net l
    () public URL(String protocol String host String file)
    new URL(http /pages/ html
    () public URL(String protocol String host int port String file)
    URL gamelan=new URL(http Pages/l
    注意類URL的構造方法都聲明拋棄非運行時例外(MalformedURLException)因此生成URL對象時我們必須要對這一例外進行處理通常是用trycatch語句進行捕獲格式如下
    try{
    URL myURL= new URL(…)
    }catch (MalformedURLException e){
    …  }
    解析一個URL
    一個URL對象生成後其屬性是不能被改變的但是我們可以通過類URL所提供的方法來獲取這些屬性
    public String getProtocol() 獲取該URL的協議名
    public String getHost() 獲取該URL的主機名
    public int getPort() 獲取該URL的端口號如果沒有設置端口返回
    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的錨
    從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(
    //構建一URL對象
    BufferedReader in = new BufferedReader(new InputStreamReader(tircopenStream()))
    //使用openStream得到一輸入流並由此構造一個BufferedReader對象
    String inputLine;
    while ((inputLine = inreadLine()) != null)
    //從輸入流不斷的讀數據直到讀完為止
    Systemoutprintln(inputLine) //把讀入的數據打印到屏幕上
    inclose() //關閉輸入流
    }
    }


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


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26399.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.