Java 應用環境本質是 Client/Server,更精確說是 Browser/Server (B/S) 三層模型:
| 傳統 C/S 二層 | Java B/S 三層 |
|---|---|
| 客戶端含業務邏輯 + 資料存取 | 客戶端 = 瀏覽器(薄客戶端,僅顯示) |
| 資料庫伺服器 | 應用伺服器 + 資料庫伺服器分離 |
優勢:運算下沉客戶端(Applet/Web Start)、動態擴充性強、部署維護集中化。
核心包:java.net。擴展子包對應協議:
| 子包 | 協議/功能 |
|---|---|
java.net | 基礎網路:Socket、URL、InetAddress、Datagram |
java.net.ftp | FTP 協議處理 |
java.net.www.content | WWW 內容處理 |
java.net.www.html | HTML 解析/渲染支援 |
java.net.www.http | HTTP 協議實現 |
動態協議擴充機制允許運行時註冊新協議處理器。
基於連接的可靠傳輸(TCP):
Socket 連接ServerSocket server = new ServerSocket(PORT);
while (true) {
Socket client = server.accept(); // 阻塞等待連接
new Thread(() -> handle(client)).start(); // 每連接一執行緒
}
void handle(Socket client) {
try (BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(client.getOutputStream(), true)) {
String request = in.readLine();
String response = process(request); // 如:反轉字串
out.println(response);
} catch (IOException e) { /* log */ }
}
Socket socket = new Socket("serverHost", PORT);
try (PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
out.println("Hello Server");
String response = in.readLine();
System.out.println("Server: " + response);
}
accept() 返回新 Socket 處理具體連接,主迴圈持續監聽新連接。SSLSocketFactory)、輸入驗證、速率限制、認證授權。| 時代 | 技術棧 | 特徵 |
|---|---|---|
| J2EE 早期 | Servlet + JSP + JavaBean + RMI/IIOP | 重量級 EJB、應用伺服器綁定 |
| Spring 時代 | Spring MVC + Spring Remoting (RMI/Hessian/HttpInvoker) + JMS | POJO 開發、聲明式事務、輕量容器 |
| 微服務時代 | Spring Boot + REST/GraphQL/gRPC + Netflix OSS / Spring Cloud | 容器化、服務發現、熔斷、配置中心、分布式追蹤 |
| 雲原生時代 | Kubernetes + Istio/Linkerd + Knative + GraalVM Native Image | Serverless、自動擴縮容、多雲部署、啟動毫秒級 |
Java 從 java.net.Socket 起步,構建了完整的網路生態:URL/URLConnection → Servlet API → RMI → JMS → Web Services → REST → gRPC → Reactive Streams。理解「請求-應答」基礎模型與 ServerSocket/Socket 交互本質,是掌握所有上層框架的基石。現代開發雖少直接操作 Socket,但網路分層、協議設計、併發模型、資源管理、可觀測性等核心能力始終貫穿技術演進全程。