C語言中文網 目錄

Java 什么是URL?及URL類和URLConnection類

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=http://s1.bdstatic.com/r/www/cache/......<img src=//www.baidu.com/img/gs.gif> </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

精美而實用的網站,提供C語言、C++、STL、Linux、Shell、Java、Go語言等教程,以及socket、GCC、vi、Swing、設計模式、JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo
极速pk10开户