詳解Java編程中統(tǒng)一資源定位符URL的相關(guān)使用
統(tǒng)一資源定位符URL(Uniform Resource Locator)是www客戶機(jī)訪問(wèn)Internet時(shí)用來(lái)標(biāo)識(shí)資源的名字和地址。超文本鏈路由統(tǒng)一資源定位符URL維持。URL的格式是:
<METHOD>://<HOSTNAME:PORT>/<PATH>/<FILE>
其中:Method是傳輸協(xié)議:HOSTNAME是文檔和服務(wù)器所在的Internet主機(jī)名(域名系統(tǒng)中DNS中的點(diǎn)地址);PORT是服務(wù)端口號(hào)(可省略);PATH是路徑名,F(xiàn)ILE是文件名。例如:
http://www.weixueyuan.net/(http是協(xié)議名,www.weixueyuan.net是主機(jī)名)
http://www.weixueyuan.net/view/6079.html (www.weixueyuan.net是主機(jī)名,view/6079.html是文件路徑和文件名)
URL類
Java.net包有URL類,一個(gè)URL對(duì)象可以表示一個(gè)網(wǎng)絡(luò)資源。程序利用URL對(duì)象能實(shí)現(xiàn)Internet尋址、網(wǎng)絡(luò)資源的定位連接、在客戶機(jī)與服務(wù)器之間直接訪問(wèn)等。URL類的構(gòu)造方法是
URL(String s)
其中,s指出網(wǎng)絡(luò)中的一個(gè)資源。
利用URL對(duì)象訪問(wèn)網(wǎng)上資源的方法是:先創(chuàng)建URL對(duì)象,如以下代碼所示:
URL myURL;
try {
myURL = new URL(“http://www.weixueyuan.net:80/”);
}catch(MalformedURLException e){
System.out.println(“有錯(cuò)的URL:”+url+e);
}
因創(chuàng)建URL對(duì)象可能會(huì)產(chǎn)生MalformedURLException異常。所以,創(chuàng)建URL對(duì)象的代碼應(yīng)出現(xiàn)在try…catch語(yǔ)句塊中,以便能捕捉網(wǎng)址錯(cuò)誤異常。
URLConnection類
要接收和發(fā)關(guān)信息還要用URLConnection類,程序獲得一個(gè)URLConnection對(duì)象,相當(dāng)于完成對(duì)指定URL的一個(gè)HTTP連接。以下是示意獲得URLConnection對(duì)象的代碼。
URL mu = new URL(“http://www.sun.com/”);//先要?jiǎng)?chuàng)建一個(gè)URL對(duì)象 URLConnection muC = mu.openConnection();//獲得URLConnection對(duì)象
上述代碼說(shuō)明,先要?jiǎng)?chuàng)建一個(gè)URL對(duì)象,然后利用URL對(duì)象的openConnection()方法,從系統(tǒng)獲得一個(gè)URLConnection對(duì)象。程序有了URLConnection對(duì)象后,就可使用URLConnection類提供的以下方法獲得流對(duì)象和實(shí)現(xiàn)網(wǎng)絡(luò)連接:
getOutputStream():獲得向遠(yuǎn)程主機(jī)發(fā)送信息的OutputStream流對(duì)象;
getInputStream():獲得從遠(yuǎn)程主機(jī)獲取信息的InputStream流對(duì)象。有了網(wǎng)絡(luò)連接的輸入和輸出流,程序就可實(shí)現(xiàn)遠(yuǎn)程通信;
connect():設(shè)置網(wǎng)絡(luò)連接。
信息的發(fā)送和接收
發(fā)送和接收信息要獲得流對(duì)象,并由流對(duì)象創(chuàng)建輸入或輸出數(shù)據(jù)流對(duì)象。然后,就可以用流的方法訪問(wèn)網(wǎng)上資源。
參見下面例子程序中的方法readByURL(),該方法說(shuō)明已知網(wǎng)址讀取網(wǎng)頁(yè)內(nèi)容的過(guò)程。方法利用網(wǎng)址參數(shù)創(chuàng)建一個(gè)URL對(duì)象url,接著利用對(duì)象url的openConnect()方法,獲得URLConnection對(duì)象tc,用對(duì)象tc的connect()方法建立網(wǎng)絡(luò)連接,接著獲得網(wǎng)絡(luò)連接的InputStreamReader類對(duì)象in,將對(duì)象in,轉(zhuǎn)化成為BufferedRead對(duì)象dis,改為緩沖式輸入。最后,用對(duì)象dis的readLine()方法完成讀取網(wǎng)絡(luò)文本數(shù)據(jù)。
如同本地?cái)?shù)據(jù)流一樣,網(wǎng)上資源使用結(jié)束后,數(shù)據(jù)流也應(yīng)及時(shí)關(guān)閉。例如,代碼
dis.close();
關(guān)閉先前代碼建立的流dis。
【例】以數(shù)據(jù)流方法讀取網(wǎng)頁(yè)內(nèi)容的應(yīng)用程序。程序運(yùn)行時(shí),網(wǎng)址從文本框中讀取。
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.javax.swing.*;
public class Example10_2{
public static void main(String args[]){
new downNetFile();
}
}
class DownNetFile extends JFrame implements ActionListener{
JTextFileld infield = new JTextField(30);
JTextarea showArea = new JTextArea();
JButton b = new JButton(“download”);JPanel p = new JPanel();
DownNetFile(){
super(“read network text file application”);
Container con = this.getContentPane();
p.add(infield);p.add(b);
JScrollPane jsp = new JScrollPane(showArea);
b.addActionListener(this);
con.add(p,”North”);con.add(jsp,”Center”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500,400);setVisible(true);
}
public void actionPerformed(ActionEvent e){
readByURL(infield.getText());
}
public void readByURL(String urlName){
try{
URL url = new URL(urlName);//由網(wǎng)址創(chuàng)建URL對(duì)象
URLConnection tc = url.openConnectin();//獲得URLConnection對(duì)象
tc.connect();//設(shè)置網(wǎng)絡(luò)連接
InptStreamReader in = new InputStreamReader(tc.getInputStream());
BufferedReader dis = new BufferedReader(in);//采用緩沖式輸入
String inline;
while((inline = dis.readLine())!=null){
showArea.append(inline +”\n”);
}
dis.close();//網(wǎng)上資源使用結(jié)束后,數(shù)據(jù)流及時(shí)關(guān)閉
}catch(MalformedURLException e){
e.printStackTrace();
}
catch(IOException e){e.printStacktrace();}
/*訪問(wèn)網(wǎng)上資源可能產(chǎn)生MalformedURLException和IOException異常*/
}
}
相關(guān)文章
java.io.NotSerializableException異常的問(wèn)題及解決
這篇文章主要介紹了java.io.NotSerializableException異常的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
java數(shù)據(jù)結(jié)構(gòu)與算法之noDups去除重復(fù)項(xiàng)算法示例
這篇文章主要介紹了java數(shù)據(jù)結(jié)構(gòu)與算法之noDups去除重復(fù)項(xiàng)算法實(shí)現(xiàn)技巧,程序代碼非常簡(jiǎn)單,關(guān)鍵在于循環(huán)與判定,需要的朋友可以參考下2016-08-08
SpringBoot啟動(dòng)報(bào)錯(cuò)屬性循環(huán)依賴報(bào)錯(cuò)問(wèn)題的解決
這篇文章主要介紹了SpringBoot啟動(dòng)報(bào)錯(cuò)屬性循環(huán)依賴報(bào)錯(cuò)問(wèn)題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
詳解Java?ReentrantLock可重入,可打斷,鎖超時(shí)的實(shí)現(xiàn)原理
前面講解了ReentrantLock加鎖和解鎖的原理實(shí)現(xiàn),但是沒(méi)有闡述它的可重入、可打斷以及超時(shí)獲取鎖失敗的原理,本文就重點(diǎn)講解這三種情況,需要的可以了解一下2022-10-10
idea向System.getenv()添加系統(tǒng)環(huán)境變量的操作
這篇文章主要介紹了idea向System.getenv()添加系統(tǒng)環(huán)境變量的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
SpringBoot2使用Jetty容器操作(替換默認(rèn)Tomcat)
這篇文章主要介紹了SpringBoot2使用Jetty容器操作(替換默認(rèn)Tomcat),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10
Java獲取CPU和內(nèi)存占用率最簡(jiǎn)單的方法
這篇文章主要介紹了Java獲取CPU和內(nèi)存占用率最簡(jiǎn)單的方法,文中通過(guò)代碼示例和圖文結(jié)合的方式給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-06-06
Springboot 整合 Java DL4J 實(shí)現(xiàn)時(shí)尚穿搭推薦系統(tǒng)(實(shí)例代碼)
本文介紹了如何使用SpringBoot和JavaDeeplearning4j框架搭建一個(gè)時(shí)尚穿搭推薦系統(tǒng),文章詳細(xì)闡述了系統(tǒng)的技術(shù)架構(gòu)、數(shù)據(jù)集格式、Maven依賴配置、模型訓(xùn)練和預(yù)測(cè)代碼實(shí)現(xiàn),以及單元測(cè)試和預(yù)期輸出結(jié)果2024-10-10

