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資源進行訪問了。Java的URL類可以讓訪問網絡資源就像是訪問你本地的文件夾一樣方便快捷。我們通過使用Java的URL類就可以經由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”);
在這個例子中,我們創建了一個使用完整URL的URL 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 classes對URL進行寫的操作同樣也是非常簡單的。一旦你建立了一個成功的連接之後,你就可以得到來自此連接的輸出流並且開始進行寫的操作。當然,只有對於客戶所希望的數據進行寫的操作纔是有意義的。同樣的,在獲得並對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);
}
}
}