當Java程序需要向服務器發送請求或讀取服務器數據時,使用URLConnection類是比較好的選擇。URLConnection類封裝了與服務器互動操作的方法,通過它可以建立與服務器的遠程連接,檢查服務器資源的屬性,向服務器發送請求并接收服務器返回的數據。
URLConnection類是一個抽象類,它不能直接實例化為對象,但URL實例對象可以返回一個URLConnection類的子類對象。返回的子類對象與URL打開的網絡資源采用的協議有關。如果是HTTP協議,URL實例對象會返回HttpURLConnection對象。如果是FTP協議,URL實例對象會返回FtpURLConnection對象。
URLConnection類常用方法說明如下:
void connect()
該方法用于與遠程資源建立連接。如果尚未建立此連接,則打開指向此URL引用的資源鏈接。如果在連接已打開時調用connect方法(由值為true的connected字段指示),則忽略該調用。
void setRequestProperty(String key, String value)
該方法用于設置網絡資源請求屬性。Key參數為已知請求的關鍵字(例如,“Accept”),value是與key關聯的值。
void setReadTimeout(int timeout)
該方法用于設置讀取網絡資源數據超時時間(以毫秒為單位)。
void setConnectTimeout(int timeout)
該方法用于設置連接網絡資源的超時時間(以毫秒為單位)
InputStream getInputStream()
該方法用于返回從這個打開的連接讀取的輸入流。
HttpURLConnection類常用方法說明如下:
int getResponseCode()
該方法從HTTP響應消息獲取狀態代碼。返回200表示請求響應成功,其它值表示請求響應失敗。
void setRequestMethod(String method)
該方法設置HTTP請求方法之一:GET/POST/HEAD/OPTIONS/PUT/DELETE/TRACE。默認是GET。
案例1:建立URLConnectionTest類,連接遠程服務器,向服務器發送服務請求,并接收服務器的請求響應數據。
該遠程服務提供求兩數和服務,客戶端向該服務發送服務請求,并向該服務提交兩個待求和的整數,該服務返回求和結果。
在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 {
// 實例化URL對象
URL url = new URL(server);
// 通過URL對象打開一個連接,顯示轉換為httpURLConnection類
connection = (HttpURLConnection) url.openConnection();
// 設置連接方式:get
connection.setRequestMethod(“GET”);
// 設置連接遠程服務的超時時間:15000毫秒
connection.setConnectTimeout(15000);
// 設置讀取遠程服務返回的數據時間:60000毫秒
connection.setReadTimeout(60000);
// 建立連接,發送請求
connection.connect();
// 通過connection連接,獲取輸入流
if (connection.getResponseCode() == 200) {
// 從打開的連接獲取輸入流,接收返回數據
stream = connection.getInputStream();
// 實例化BufferedReader對象,并指定字符集
reader = new BufferedReader(new InputStreamReader(stream, “UTF-8”));
// 實例化字符串生成器
StringBuffer sbf = new StringBuffer();
String temp = null;
// 從輸入流讀取數據
while ((temp = reader.readLine()) != null) {
sbf.append(temp);
sbf.append(“\r\n”);
}
// 返回內容輸出到控制臺
System.out.println(“遠程服務返回的數據:” + sbf.toString());
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 關閉資源
if (null != reader) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != stream) {
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
// 關閉遠程連接
connection.disconnect();
}
}
}
URLConnectionTest程序的主要功能是請求一個求兩數和的遠程服務,并向遠程服務提交待求和的兩個整數,遠程服務計算兩數的和,并將計算結果返回給程序,程序將計算結果輸出到控制臺。
程序使首先用URL對象定位和打開遠程服務,并應用URL對象的openConnection()方法獲取HttpURLConnection實例對象。然后應用HttpURLConnection實例對象分別設置遠程服務的連接超時時間、服務響應超時時間、讀取數據超時時間。再調用HttpURLConnection實例對象的connect()方法向遠程服務發送請求,并調用HttpURLConnection實例對象的getResponseCode()方法判斷遠程服務是否響應成功,如果返回值是200,說明服務器響應成功。最后讀取遠程服務返回的數據,并將讀取的數據輸出到控制臺。
程序執行結果如下圖所示:
-
服務器
+關注
關注
12文章
9425瀏覽量
86491 -
JAVA
+關注
關注
19文章
2980瀏覽量
105673 -
HTTP
+關注
關注
0文章
513瀏覽量
31820
發布評論請先 登錄
相關推薦
HTTP客戶端請求,服務器FIN在讀取所有數據之前
使用NodeMCU創建一個簡單的HTTP服務器
ESP32 Web服務器可以向外部Rest API發起HTTP請求嗎?
GET如何才能請求到多個服務器Master到slaves?
基于Java的游戲服務器開發技術體系詳解
Java程序設計教程之Java WEB服務器端編程的詳細資料說明

單片機使用HTTP POST方式發送數據的資料和程序免費下載

HTTP的曲折:網絡請求到層層封裝和終端拆分

MCU沒有響應服務器請求,NodeMCU HTTP服務器停止響應

HTTP應用——上傳(POST)數據到服務器,從服務器下載(GET)文件報文

評論