JAVA中三種URL連接方法

style="WIDTH: 345px; HEIGHT: 285px" align="left" marginwidth="0" marginheight="0" src="http://www.ymfund.com/web/ad.html" frameborder="0" width="468" scrolling="no" height="60">

JAVA中三種URL連接方法

 

Java的網絡類可以讓你通過網絡或者遠程連接來實現應用。而且,這個平臺現在已經可以對國際互聯網以及URL資源進行訪問了。JavaURL類可以讓訪問網絡資源就像是訪問你本地的文件夾一樣方便快捷。我們通過使用JavaURL類就可以經由URL完成讀取和修改數據的操作。現在,我們來看一看,如何才能發揮出URL類的效力。

  通過URL進行工作

  通過一個URL連接,我們就可以確定資源的位置,比如網絡文件、網絡頁面以及網絡應用程序等。其中包含了許多的語法元素。舉個例子來說,請看下面這個URL連接:

  http://www.mycompany.com:8080/mywebapps/AWebApp

  這個連接規定使用http協議。主機名稱爲www.mycompany.com。端口號爲8080。這個URL的其它部分, /mywebapps/AwebApp,則確定了我們要在這個站點上所要訪問的資源。在這個例子中的資源恰好是一個網絡應用程序。而且,URL還可以包含其它的元素,比如說文件段以及查詢信息等等。

  從URL得到的數據可以是多種多樣的,這些都需要一種統一的機制來完成對URL的讀取與修改操作。Java語言在它的java.net軟件包裏就提供了這麼一種機制。有關這個java.net軟件包的問題我們會在URL class的部分中進行討論。

  URL class是從URL標示符中提取出來的。它允許Java程序設計人員打開某個特定URL連接,並對裏邊的數據進行讀寫操作以及對首部信息進行讀寫操作。而且,它還允許程序員完成其它的一些有關URL的操作。我們將會討論由java.io包裹所提供的URL class以及stream classes是如何允許你對一個URL進行操作的,而且我們將會以對文件以及socket連接的操作差不多的風格對其進行討論。

  構造器

  在創建java.net URL的實例的時候,你能夠利用許多公共構造器,從而讓其變得更具靈活性。舉個例子來說,這個class提供了一種使用完整URL信息串的構造器,一種使用把URL信息串分解成爲協議、主機名以及文件和資源的構造器,還有一種把URL信息串分解成爲協議、主機名、端口號以及文件的構造器。我們首先使用完整的URL來創建一個URL class的例子:URL aURL = new URL(“http://www.mycompany.com:8080/index.html”);

  在這個例子中,我們創建了一個使用完整URLURL class,其中明確指出了使用的協議是http,主機名稱是www.mycompany.com,端口號碼爲8080,文件/資源爲index.html。如果組成URL的語法發生了錯誤,那麼構造器就會發出MalformedURLException。打開一個URL連接

  一旦你成功的創建了一個URL class的實例,你就可以對其進行操作了。但是在你能夠訪問這個URL上的資源和內容之前,你必須要打開到這些資源與內容上的連接。你可以通過使用openConnection來完成這一操作。

  使用openConnection並不需要參數,並且在操作成功之後,它會返回一個URLConnection class的實例。在Listing A中,向我們演示了打開一個到URL連接的過程。一旦你的連接成功,你就可以開始對這個URLConnection的輸入以及輸出流進行讀和寫的操作了。

  從URL連接中讀取數據

  使用java.io stream class來從URL中讀取數據是一個非常簡單的過程。一旦你建立了一個成功的連接,那麼你就可以獲得針對這個連接的輸入流並且開始進行寫的操作了。URL可以代表很多不同種類的數據類型所組成的資源。很幸運的是,java.io classes可以以與對文件流或者socket流進行操作的同樣方式進行對從URLConnection流返回的數據進行操作。在Listing B中,向我們展示瞭如何從URL中讀取文本數據。

  對URL進行寫的操作

  使用java.io stream classesURL進行寫的操作同樣也是非常簡單的。一旦你建立了一個成功的連接之後,你就可以得到來自此連接的輸出流並且開始進行寫的操作。當然,只有對於客戶所希望的數據進行寫的操作纔是有意義的。同樣的,在獲得並對URLConnection流進行寫的操作之前,你還需要使用setDoOutput(boolean)方式把輸出(Output)屬性設置爲真(true)來指定可以進行寫操作的那些連接。Java.io classes允許你把數據寫到URLConnection流,這個操作也和你對文件流和socket流進行的寫操作一樣。Listing C向我們展示瞭如何把對象數據寫入一個URL

  其它的操作

  你可以從URL以及URLConnection對象連接中得到其它類型的信息,比如說主機名、端口、內容長度、內容編碼以及內容的類型。把這些方法連同stream I/O classes一起使用可以讓你建立複雜而有效的網絡客戶應用程序和服務。

  對網絡的便捷訪問

  由Java平臺所提供的URL class讓我們可以方便而有效的訪問網絡上的資源,而且可以讓我們象訪問本地文件一樣的感到輕鬆愉快。我們不用爲網絡通訊的細節問題操心,只需要把注意力集中到製作有用的應用程序和服務上去。

 

例子:

package zzm.java.net;

import java.net.URLConnection;

import java.net.HttpURLConnection;

import java.net.JarURLConnection;

import java.net.URL;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.InputStream;

import java.io.BufferedReader;

import java.io.InputStreamReader;

 

public class URLConnectionTest {

    public static void main(String []args){

       try{

           /*

            *   方法一

            *     

           URL url = new URL("http://www.sina.com.cn");

           URLConnection urlcon = url.openConnection();

           InputStream is = urlcon.getInputStream();

            */

          

           /*

            * 方法二

            *

            * URL url = new URL("http://www.yhfund.com.cn");

           HttpURLConnection urlcon = (HttpURLConnection)url.openConnection();

           InputStream is = urlcon.getInputStream();

            */

          

          

          

           /*

            * 方法三

            * URL url = new URL("http://www.yhfund.com.cn");

           InputStream is = url.openStream();

            */

           long begintime = System.currentTimeMillis();

          

           URL url = new URL("http://www.yhfund.com.cn");

           HttpURLConnection urlcon = (HttpURLConnection)url.openConnection();

           urlcon.connect();         //獲取連接

           InputStream is = urlcon.getInputStream();

           BufferedReader buffer = new BufferedReader(new InputStreamReader(is));

           StringBuffer bs = new StringBuffer();

           String l = null;

           while((l=buffer.readLine())!=null){

               bs.append(l).append("/n");

           }

           System.out.println(bs.toString());

          

           //System.out.println(" content-encode"+urlcon.getContentEncoding());

           //System.out.println(" content-length"+urlcon.getContentLength());

           //System.out.println(" content-type"+urlcon.getContentType());

           //System.out.println(" date"+urlcon.getDate());

      

          

           System.out.println("總共執行時間爲:"+(System.currentTimeMillis()-begintime)+"毫秒");

        }catch(IOException e){

           System.out.println(e);

       }

    }

 

}

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章