在 Java 的 API 中的 java.net 包中包含一個 URL 類和一個 URLConnection 類。下面介紹這兩個類的相關知識。
URL 概念
URL 是統一資源定位符(Uniform Resource Locator)的簡稱,它表示 Internet 上某一資源的地址。通過 URL 使用者可以存取各種網路資源,比如常見的 WWW 以及 FTP 站點。
瀏覽器可以通過解析給定的 URL 在網路上查詢相應的檔案或其他資源。
URL 的語法格式如下所示。
protocol://resourceName
協定名(protocol)指明獲取資源所使用的傳輸協定,如 HTTP、FTP 和 file 等,
資源名(resourceName)則應該是資源的完整地址,包括主機名、埠號、檔名或檔案內部的一個參照。下面是一些簡單的 URL 範例。
http://www.sun.com/ 協定名://主機名
http://localhost:8080/Test/admin/login.jsp 協定名://機器名:埠號/檔名
URL 類
在 java.net 包中包含專門用來處理 URL 的類 URL,可以獲得 URL 的相關資訊,例如 URL 的協定名和主機名等。下面分別對它的構造方法和常用方法進行介紹。
URL 的構造方法如表 1 所示。
表1 URL 的構造方法
構造方法 |
說明 |
public URL (String spec) |
通過一個表示 URL 地址的字串可以構造一個 URL 物件。 |
public URL(URL context,String spec) |
使用基本地址和相對 URL 構造一個 URL 物件。 |
public URL(String protocol,String host,String file) |
使用指定的協定、主機名和檔名建立一個 URL 物件。 |
public URL(String protocol,String host,int port,String file) |
使用指定的協定、主機名、埠號和檔名建立一個 URL 物件。 |
URL 的常用方法如表 2 所示。
表2 URL 的常用方法
方法 |
說明 |
public String getProtocol() |
獲取該 URL 的協定名。 |
public String getHost() |
獲取該 URL 的主機名。 |
public int getPort() |
獲取該 URL 的埠號,如果沒有設定埠,返回 -1。 |
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 的錨點。 |
URLConnection 類
完成了 URL 的定義,接下來就可以獲得 URL 的通訊連線。在 java.net 包中,定義了專門的 URLConnection 類來表示與 URL 建立的通訊連線,URLConnection 類的物件使用 URL 類的 openConnection() 方法獲得。
URLConnection 類的主要方法如表 3 所示。
表3 URLConnection 類的主要方法
方法 |
說明 |
void addRequestProperty(String key,String value) |
新增由鍵值對指定的一般請求屬性。key 指的是用於識別請求的關鍵字
(例如 accept),value 指的是與該鍵關聯的值。 |
void connect() |
開啟到此 URL 所參照的資源的通訊連結(如果尚未建立這樣的連結)。 |
Object getConnection() |
檢索此 URL 連結的內容。 |
InputStream getInputStream() |
返回從此開啟的連結讀取的輸入流。 |
OutputStream getOutputStream() |
返回寫入到此連結的輸出流。 |
URL getURL() |
返回此 URLConnection 的 URL 欄位的值。 |
例 1
使用 URL 和 URLConnection 類獲取與百度首頁的連結並將其頁面資訊輸出到控制台,主要步驟如下所示。
(1) 建立一個類,編寫 main() 方法,在該方法中建立一個 URL 物件,然後傳入引數“http://www.baidu.com/”,輸出 URL 的相關資訊,程式碼如下所示。
package ch16;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
public class URLDemo
{
public static void main(String[] args)
{
try
{
URL url=new URL("http://www.baidu.com/");
System.out.println("協定:" + url.getProtocol());
System.out.println("主機:" + url.getHost());
System.out.println("埠:" + url.getPort());
InputStream in;
}
catch(IOException e)
{
//TODO 自動生成的 catch 塊
e.printStackTrace();
}
}
}
(2) 在 main() 方法的 try 模組中繼續新增程式碼,獲得 URLConnection 物件,通過輸入流讀取頁面原始碼並將資訊輸出到控制台,程式碼如下所示。
URLConnection uc=url.openConnection();
in=uc.getInputStream();
byte[] b=new byte[1024];
int len;
while((len=in.read(b))!=-1)
{
System.out.println(new String(b,0,len));
}
in.close();
(3) 執行程式,執行結果如下所示。
協定:http
主機:www.baidu.com
埠:-1
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=https://s3.ap-northeast-1.wasabisys.com/img.tw511.com/202007/errore0antsmdgbj.html> </p> </div> </div> </div> </body> </html>
提取 URL 協定名稱
我們知道 URL 中必須有一個協定名稱,常用的協定有 HTTP、HTTPS 和 FTP 等。本範例將允許使用者輸入一個 URL,然後從中提取出協定名稱。
範例程式碼如下:
package ch16;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Scanner;
public class URLDemo1
{
public static void main(String[] args)
{
try
{
Scanner scan=new Scanner(System.in); //建立輸入掃描器
System.out.println("請輸入一個完整的網址:");
String line=scan.nextLine(); //獲取使用者輸入文字
URL url=new URL(line); //建立URL物件
System.out.println("這個網址的主機名稱是:"+url.getHost()); //獲取主機名稱
System.out.println("這個網址的URL協定名稱是:"+url.getProtocol()); //獲取協定名稱
}
catch(MalformedURLException e)
{
System.out.println("輸入的是非法網址"); //提示錯誤資訊
}
}
}
如上述程式碼所示,在建立一個 URL 類物件之後呼叫 getHost() 方法獲取主機名稱,呼叫 getPmtocol() 方法獲取協定名稱。範例執行結果如下所示。
請輸入一個完整的網址:
http://www.baidu.com
這個網址的主機名稱是:www.baidu.com
這個網址的URL協定名稱是:http
請輸入一個完整的網址:
ftp://www.baidu.com/seo
這個網址的主機名稱是:www.baidu.com
這個網址的URL協定名稱是:ftp