當(dāng)Java程序需要向服務(wù)器發(fā)送請(qǐng)求或讀取服務(wù)器數(shù)據(jù)時(shí),使用URLConnection類是比較好的選擇。URLConnection類封裝了與服務(wù)器互動(dòng)操作的方法,通過它可以建立與服務(wù)器的遠(yuǎn)程連接,檢查服務(wù)器資源的屬性,向服務(wù)器發(fā)送請(qǐng)求并接收服務(wù)器返回的數(shù)據(jù)。
URLConnection類是一個(gè)抽象類,它不能直接實(shí)例化為對(duì)象,但URL實(shí)例對(duì)象可以返回一個(gè)URLConnection類的子類對(duì)象。返回的子類對(duì)象與URL打開的網(wǎng)絡(luò)資源采用的協(xié)議有關(guān)。如果是HTTP協(xié)議,URL實(shí)例對(duì)象會(huì)返回HttpURLConnection對(duì)象。如果是FTP協(xié)議,URL實(shí)例對(duì)象會(huì)返回FtpURLConnection對(duì)象。
URLConnection類常用方法說明如下:
void connect()
該方法用于與遠(yuǎn)程資源建立連接。如果尚未建立此連接,則打開指向此URL引用的資源鏈接。如果在連接已打開時(shí)調(diào)用connect方法(由值為true的connected字段指示),則忽略該調(diào)用。
void setRequestProperty(String key, String value)
該方法用于設(shè)置網(wǎng)絡(luò)資源請(qǐng)求屬性。Key參數(shù)為已知請(qǐng)求的關(guān)鍵字(例如,“Accept”),value是與key關(guān)聯(lián)的值。
void setReadTimeout(int timeout)
該方法用于設(shè)置讀取網(wǎng)絡(luò)資源數(shù)據(jù)超時(shí)時(shí)間(以毫秒為單位)。
void setConnectTimeout(int timeout)
該方法用于設(shè)置連接網(wǎng)絡(luò)資源的超時(shí)時(shí)間(以毫秒為單位)
InputStream getInputStream()
該方法用于返回從這個(gè)打開的連接讀取的輸入流。
HttpURLConnection類常用方法說明如下:
int getResponseCode()
該方法從HTTP響應(yīng)消息獲取狀態(tài)代碼。返回200表示請(qǐng)求響應(yīng)成功,其它值表示請(qǐng)求響應(yīng)失敗。
void setRequestMethod(String method)
該方法設(shè)置HTTP請(qǐng)求方法之一:GET/POST/HEAD/OPTIONS/PUT/DELETE/TRACE。默認(rèn)是GET。
案例1:建立URLConnectionTest類,連接遠(yuǎn)程服務(wù)器,向服務(wù)器發(fā)送服務(wù)請(qǐng)求,并接收服務(wù)器的請(qǐng)求響應(yīng)數(shù)據(jù)。
該遠(yuǎn)程服務(wù)提供求兩數(shù)和服務(wù),客戶端向該服務(wù)發(fā)送服務(wù)請(qǐng)求,并向該服務(wù)提交兩個(gè)待求和的整數(shù),該服務(wù)返回求和結(jié)果。
在ip包下新建URLConnectionTest類。代碼如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class URLConnectionTest {
public static void main(String[] args) {
HttpURLConnection connection = null;
InputStream stream = null;
BufferedReader reader = null;
String server = “url&opone=30&optwo=60”;
try {
// 實(shí)例化URL對(duì)象
URL url = new URL(server);
// 通過URL對(duì)象打開一個(gè)連接,顯示轉(zhuǎn)換為httpURLConnection類
connection = (HttpURLConnection) url.openConnection();
// 設(shè)置連接方式:get
connection.setRequestMethod(“GET”);
// 設(shè)置連接遠(yuǎn)程服務(wù)的超時(shí)時(shí)間:15000毫秒
connection.setConnectTimeout(15000);
// 設(shè)置讀取遠(yuǎn)程服務(wù)返回的數(shù)據(jù)時(shí)間:60000毫秒
connection.setReadTimeout(60000);
// 建立連接,發(fā)送請(qǐng)求
connection.connect();
// 通過connection連接,獲取輸入流
if (connection.getResponseCode() == 200) {
// 從打開的連接獲取輸入流,接收返回?cái)?shù)據(jù)
stream = connection.getInputStream();
// 實(shí)例化BufferedReader對(duì)象,并指定字符集
reader = new BufferedReader(new InputStreamReader(stream, “UTF-8”));
// 實(shí)例化字符串生成器
StringBuffer sbf = new StringBuffer();
String temp = null;
// 從輸入流讀取數(shù)據(jù)
while ((temp = reader.readLine()) != null) {
sbf.append(temp);
sbf.append(“\r\n”);
}
// 返回內(nèi)容輸出到控制臺(tái)
System.out.println(“遠(yuǎn)程服務(wù)返回的數(shù)據(jù):” + sbf.toString());
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 關(guān)閉資源
if (null != reader) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != stream) {
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 關(guān)閉遠(yuǎn)程連接
connection.disconnect();
}
}
}
URLConnectionTest程序的主要功能是請(qǐng)求一個(gè)求兩數(shù)和的遠(yuǎn)程服務(wù),并向遠(yuǎn)程服務(wù)提交待求和的兩個(gè)整數(shù),遠(yuǎn)程服務(wù)計(jì)算兩數(shù)的和,并將計(jì)算結(jié)果返回給程序,程序?qū)⒂?jì)算結(jié)果輸出到控制臺(tái)。
程序使首先用URL對(duì)象定位和打開遠(yuǎn)程服務(wù),并應(yīng)用URL對(duì)象的openConnection()方法獲取HttpURLConnection實(shí)例對(duì)象。然后應(yīng)用HttpURLConnection實(shí)例對(duì)象分別設(shè)置遠(yuǎn)程服務(wù)的連接超時(shí)時(shí)間、服務(wù)響應(yīng)超時(shí)時(shí)間、讀取數(shù)據(jù)超時(shí)時(shí)間。再調(diào)用HttpURLConnection實(shí)例對(duì)象的connect()方法向遠(yuǎn)程服務(wù)發(fā)送請(qǐng)求,并調(diào)用HttpURLConnection實(shí)例對(duì)象的getResponseCode()方法判斷遠(yuǎn)程服務(wù)是否響應(yīng)成功,如果返回值是200,說明服務(wù)器響應(yīng)成功。最后讀取遠(yuǎn)程服務(wù)返回的數(shù)據(jù),并將讀取的數(shù)據(jù)輸出到控制臺(tái)。
程序執(zhí)行結(jié)果如下圖所示:
-
服務(wù)器
+關(guān)注
關(guān)注
12文章
9672瀏覽量
87211 -
JAVA
+關(guān)注
關(guān)注
20文章
2984瀏覽量
106784 -
HTTP
+關(guān)注
關(guān)注
0文章
520瀏覽量
32435
發(fā)布評(píng)論請(qǐng)先 登錄
HTTP協(xié)議的運(yùn)作方式及請(qǐng)求/響應(yīng)的步驟

HTTP客戶端請(qǐng)求,服務(wù)器FIN在讀取所有數(shù)據(jù)之前
使用NodeMCU創(chuàng)建一個(gè)簡(jiǎn)單的HTTP服務(wù)器
如何通過http請(qǐng)求將值發(fā)送到服務(wù)器?
ESP32 Web服務(wù)器可以向外部Rest API發(fā)起HTTP請(qǐng)求嗎?
GET如何才能請(qǐng)求到多個(gè)服務(wù)器Master到slaves?
基于Java的游戲服務(wù)器開發(fā)技術(shù)體系詳解
Java程序設(shè)計(jì)教程之Java WEB服務(wù)器端編程的詳細(xì)資料說明

單片機(jī)使用HTTP POST方式發(fā)送數(shù)據(jù)的資料和程序免費(fèi)下載

HTTP的曲折:網(wǎng)絡(luò)請(qǐng)求到層層封裝和終端拆分

MCU沒有響應(yīng)服務(wù)器請(qǐng)求,NodeMCU HTTP服務(wù)器停止響應(yīng)

HTTP應(yīng)用——上傳(POST)數(shù)據(jù)到服務(wù)器,從服務(wù)器下載(GET)文件報(bào)文

HTTP服務(wù)器項(xiàng)目實(shí)現(xiàn)介紹

使用NS1串口服務(wù)器HTTP模式上傳服務(wù)器數(shù)據(jù)

評(píng)論