最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 必知必會(huì)的 URL 和 URLConnection使用

 更新時(shí)間:2019年10月24日 09:58:43   作者:沉默王二  
這篇文章主要介紹了Java 必知必會(huì)的 URL 和 URLConnection使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

java.net.URL 類將 URL 地址進(jìn)行了封裝,并提供了解析 URL 地址的基本方法,比如獲取 URL 的主機(jī)名和端口號(hào)。

java.net.URLConnection 則代表了應(yīng)用程序和 URL 之間的通信鏈接,可用于讀取和寫入此 URL 引用的資源。

URLConnection 看起來(lái)只是比 URL 多了一個(gè) Connection,它們之間的關(guān)系也僅限于此嗎?

01、什么是 URL

為了搞清楚什么是 URL,需要引入另外兩個(gè)概念 URI 和 URN。

什么鬼,URL 都沒(méi)搞清楚,又來(lái)兩個(gè)搞不清楚的?別擔(dān)心,我能像變了魔法一樣讓大家把三個(gè)都搞清楚。

  • URI = Universal Resource Identifier,中文釋義為統(tǒng)一資源標(biāo)志符
  • URL = Universal Resource Locator,中文釋義為統(tǒng)一資源定位符
  • URN = Universal Resource Name,中文釋義為統(tǒng)一資源名稱

它們之間的關(guān)系如下圖所示:

這圖啥意思啊,怎么辦呢?張小敬有問(wèn)題就去問(wèn)葛佬,咱不會(huì)就去問(wèn)“維基百科”啊。

URI 可以分為 URL 和 URN,或者是 URL 和 URN 的結(jié)合體(同時(shí)具備 Locator 和 Name)。URN 就好像一個(gè)人的名字,URL 就像一個(gè)人的地址。換句話說(shuō):URN 確定了身份,URL 提供了找到它的方式。

概念清晰了吧?URI 是一個(gè)純粹的句法結(jié)構(gòu),用于指定標(biāo)識(shí) Web 資源的字符串的各個(gè)不同部分。URL 是 URI 的一個(gè)特例,包含了定位 Web 資源的足夠多的信息。URI 是統(tǒng)一資源標(biāo)識(shí)符,而 URL 是統(tǒng)一資源定位符。URL 是 URI 的一種,比如:http://www.itmind.net/。但不是所有的 URI 都是 URL,因?yàn)?URI 可能包括一個(gè)子集,即統(tǒng)一資源名稱 (URN,命名了資源但不指定如何定位資源),比如說(shuō):mailto:qing_gee@163.com。

吧啦吧啦說(shuō)這么多挺累的,來(lái)一發(fā)實(shí)例吧,用于獲取 URL 的主機(jī)名和端口號(hào)。

URL url = new URL("http://www.itmind.net/category/payment-selection/zhishixingqiu-jingxuan/");

System.out.println("host: " + url.getHost());
System.out.println("port: " + url.getPort());
System.out.println("uri_path: " + url.getPath());

// 輸出
// host: www.itmind.net
// port: -1
// uri_path: /category/payment-selection/zhishixingqiu-jingxuan/

1)創(chuàng)建 java.net.URL 對(duì)象的方法非常簡(jiǎn)單,只需要一行代碼。

URL url = new URL(URL地址);

URL 對(duì)象是不可變的,因?yàn)?URL 類是 final 類型的,這樣的好處就是保證它是"線程安全"的。

2)有了 java.net.URL 對(duì)象后,就可以獲取 URL 相關(guān)的主機(jī)名、端口、路徑等等。

url.getHost()
url.getPort()
url.getPath()

02、什么是 URLConnection

URLConnection 是一個(gè)抽象類,代表應(yīng)用程序和 URL 之間的通信鏈接。它的實(shí)例可用于讀取和寫入此 URL 引用的資源。該類提供了比 Socket 類更易于使用、更高級(jí)的網(wǎng)絡(luò)連接抽象。

怎么獲取 URLConnection 對(duì)象呢?通過(guò) URL 對(duì)象的 openConnection() 方法,示例如下。

URL url = new URL("http://www.itmind.net");
URLConnection connection = url.openConnection();

如果 URL 協(xié)議為 HTTP 的話,返回的連接為 URLConnection 的子類 HttpURLConnection。

有了 URLConnection 對(duì)象后,可以通過(guò) getInputStream() 返回一個(gè) InputStream,由此讀取 URL 所引用的資源數(shù)據(jù)(如果讀取 ASCII 文本則為 ASCII;如果讀取 HTML 文件則為原始 HTML,如果讀取圖像文件則為二進(jìn)制圖片數(shù)據(jù)等)。

我們來(lái)嘗試讀取一下小白學(xué)堂首頁(yè)的內(nèi)容,代碼示例如下。

URL url = new URL("http://www.itmind.net");
URLConnection connection = url.openConnection();

try (InputStream in = connection.getInputStream();) {

 ByteArrayOutputStream output = new ByteArrayOutputStream();
 byte[] buffer = new byte[1024];
 int len = -1;
 while ((len = in.read(buffer)) != -1) {
 output.write(buffer, 0, len);
 }

 System.out.println(new String(output.toByteArray()));

} catch (IOException e) {
 e.printStackTrace();
}

可以使用 try-with-resource 獲取 InputStream,該類實(shí)現(xiàn)了 AutoCloseable 接口,可以在內(nèi)容讀取完畢后自動(dòng)關(guān)閉輸入流。

打印的內(nèi)容如下圖所示(部分):

 

如果你想讀取某個(gè) URL 的內(nèi)容,上述方法是一個(gè)不錯(cuò)的方案,趕快去試試吧!

03、URL 和 URLConnection 的不同

URL 和 URLConnection 最大的不同在于:

  • URLConnection 提供了對(duì) HTTP 頭部的訪問(wèn);
  • URLConnection 可以配置發(fā)送給某個(gè) URL 的請(qǐng)求參數(shù);
  • URLConnection 不僅可以讀取 URL 定位的資源,還可以向其寫入數(shù)據(jù)。

獲取 HTTP 頭部的方法有以下一些:

  • getContentType,返回 Content-type 頭字段的值,即數(shù)據(jù)的 MIME 內(nèi)容類型。若類型不可用,則返回 null。如果內(nèi)容類型是文本,則 Content-type 首部可能會(huì)包含一個(gè)標(biāo)識(shí)內(nèi)容編碼方式的字符集,例如:Content-type:text/html; charset=UTF-8
  • getContentLength(),返回 Content-length 頭字段的值,即內(nèi)容的字節(jié)數(shù)。
  • getContentEncoding(),返回 Content-encoding 頭字段的值,即內(nèi)容的編碼方式(不同于字符編碼方式),例如:x-gzip。
  • getDate(),返回 date 頭字段的值,即請(qǐng)求的發(fā)送時(shí)間。
  • getExpiration(),返回 expires(過(guò)期時(shí)間) 頭字段的值。如果返回 0,表示不過(guò)期,永遠(yuǎn)緩存。
  • getLastModified(),返回 last-modified(上次修改日期) 頭字段的值。

代碼示例如下。

URL url = new URL("http://www.itmind.net");
URLConnection connection = url.openConnection();
System.out.println(connection.getContentType());
System.out.println(connection.getContentLength());
System.out.println(connection.getContentEncoding());
System.out.println(connection.getDate());
System.out.println(connection.getExpiration());
System.out.println(connection.getLastModified());

// 輸出
// text/html; charset=UTF-8
// -1
// null
// 1566886980000
// 0
// 0

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Mybatis實(shí)現(xiàn)批量操作8種小結(jié)

    Mybatis實(shí)現(xiàn)批量操作8種小結(jié)

    本文對(duì)Mybatis的五種批處理方式進(jìn)行了性能測(cè)試,包括批量新增和批量修改,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • Java 實(shí)戰(zhàn)項(xiàng)目錘煉之仿天貓網(wǎng)上商城的實(shí)現(xiàn)流程

    Java 實(shí)戰(zhàn)項(xiàng)目錘煉之仿天貓網(wǎng)上商城的實(shí)現(xiàn)流程

    讀萬(wàn)卷書不如行萬(wàn)里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+jsp+servlet+mysql+ajax實(shí)現(xiàn)一個(gè)仿天貓網(wǎng)上商城項(xiàng)目,大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • Spring實(shí)戰(zhàn)之抽象Bean和子Bean定義與用法示例

    Spring實(shí)戰(zhàn)之抽象Bean和子Bean定義與用法示例

    這篇文章主要介紹了Spring實(shí)戰(zhàn)之抽象Bean和子Bean定義與用法,結(jié)合實(shí)例形式分析了Spring抽象Bean和子Bean相關(guān)配置、定義與使用操作技巧,需要的朋友可以參考下
    2019-11-11
  • Springboot中@Transactional注解與異常處理機(jī)制方式

    Springboot中@Transactional注解與異常處理機(jī)制方式

    這篇文章主要介紹了Springboot中@Transactional注解與異常處理機(jī)制方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 詳解Java中的HashTable

    詳解Java中的HashTable

    這篇文章主要介紹了Java中的HashTable的相關(guān)資料,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • java web過(guò)濾器處理亂碼

    java web過(guò)濾器處理亂碼

    本文主要介紹了java web過(guò)濾器處理亂碼的方法解析。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-04-04
  • mybatis學(xué)習(xí)筆記之mybatis注解配置詳解

    mybatis學(xué)習(xí)筆記之mybatis注解配置詳解

    本篇文章主要介紹了mybatis學(xué)習(xí)筆記之mybatis注解配置詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • Java框架MyBatis接口編程過(guò)程解析

    Java框架MyBatis接口編程過(guò)程解析

    這篇文章主要介紹了Java框架MyBatis接口編程過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Java基礎(chǔ)必學(xué)TreeSet集合

    Java基礎(chǔ)必學(xué)TreeSet集合

    這篇文章主要介紹了Java必學(xué)基礎(chǔ)TreeSet集合,TreeSet集合實(shí)現(xiàn)了SortedSet接口,?可以對(duì)集合中元素進(jìn)行自然排序,?要求集合中的元素必須是可比較的。下文詳細(xì)介紹需要的朋友可以參考一下
    2022-04-04
  • SpringCloudConfig之client端報(bào)錯(cuò)Could?not?resolve?placeholder問(wèn)題

    SpringCloudConfig之client端報(bào)錯(cuò)Could?not?resolve?placeholder問(wèn)

    這篇文章主要介紹了SpringCloudConfig之client端報(bào)錯(cuò)Could?not?resolve?placeholder?‘from‘?in?value?“${from}“問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助
    2022-12-12

最新評(píng)論

清新县| 衡水市| 深州市| 临湘市| 九寨沟县| 崇左市| 台东县| 贵阳市| 南平市| 健康| 新昌县| 吉隆县| 广饶县| 体育| 万年县| 探索| 专栏| 万山特区| 阿合奇县| 河曲县| 五家渠市| 抚州市| 天全县| 民县| 彭泽县| 株洲市| 和平县| 常宁市| 汾阳市| 黔江区| 昆山市| 和政县| 商丘市| 留坝县| 贵阳市| 阿拉善右旗| 灵武市| 石首市| 石阡县| 通江县| 尉犁县|