java.net 套件提供 Socket、ServerSocket、URLConnection 三大核心類。其中 URLConnection 是被忽視的「秘密武器」:它封裝了 Socket 底層細節,讓開發者以高層抽象輕鬆實現 HTTP 請求/回應,無需手動管理連線、流、協議解析。
public class URLClient {
protected URLConnection connection;
public static void main(String[] args) {
URLClient client = new URLClient();
String yahoo = client.getDocumentAt("https://www.yahoo.com");
System.out.println(yahoo);
}
public String getDocumentAt(String urlString) { ... }
}
public String getDocumentAt(String urlString) {
StringBuffer document = new StringBuffer();
try {
// 1. 建立 URL 物件
URL url = new URL(urlString);
// 2. 開啟連線(隱含建立 Socket、發送 HTTP 請求)
URLConnection conn = url.openConnection();
// 3. 流包裝鏈:InputStream → InputStreamReader → BufferedReader
// 此為 Java I/O 經典裝飾者模式應用,必須熟練掌握
BufferedReader reader = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
// 4. 逐行讀取,保留原始換行格式
String line = null;
while ((line = reader.readLine()) != null) {
document.append(line).append("\n");
}
// 5. 關閉資源
reader.close();
} catch (MalformedURLException e) {
System.out.println("URL 格式錯誤: " + urlString);
} catch (IOException e) {
System.out.println("IO 異常: " + urlString);
}
return document.toString();
}
URLConnection 雖簡便,但屬同步阻塞模型,高併發場景下易成瓶頸。現代開發可考慮 HttpClient (Apache)、OkHttp、Java 11+ HttpClient API 等非同步/連線池方案。但理解 URLConnection 仍是掌握 Java 網路編程基石的必修課。