Java 網路應用模型演進
傳統 C/S 二層架構
- 客戶端直接連接資料庫
- 商業邏輯分散於客戶端
- 部署維護困難、安全性低
Java Web 三層架構 (B/S)
瀏覽器 (HTTP)
↓
Web 伺服器 / 應用伺服器 (Servlet, EJB, Spring)
↓
資料庫伺服器 (JDBC, JPA, Hibernate)
- 展現層:HTML/CSS/JS、JSP、Thymeleaf、React/Vue
- 業務層:Spring Boot、Jakarta EE、微服務
- 資料層:連線池、ORM、快取
Java 網路類別庫總覽
| 套件 | 功能 |
| java.net | 基礎網路:Socket、URL、InetAddress |
| java.net.http | HTTP Client (Java 11+) |
| javax.net.ssl | SSL/TLS 安全通訊 |
| java.rmi | 遠端方法呼叫 |
完整 C/S 範例:文字反轉伺服器
伺服器端 (多執行緒)
public class ReverseServer extends Thread {
static final int PORT = 6543;
ServerSocket server;
public ReverseServer() throws IOException {
server = new ServerSocket(PORT);
start();
}
public void run() {
try {
while (true) {
Socket client = server.accept();
new ClientHandler(client).start();
}
} catch (IOException e) { e.printStackTrace(); }
}
static class ClientHandler extends Thread {
Socket client;
ClientHandler(Socket s) { client = s; }
public void run() {
try (BufferedReader in = new BufferedReader(
new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(client.getOutputStream(), true)) {
String line;
while ((line = in.readLine()) != null) {
String reversed = new StringBuilder(line).reverse().toString();
out.println(reversed);
}
} catch (IOException e) { e.printStackTrace(); }
}
}
public static void main(String[] args) throws IOException {
new ReverseServer();
}
}
客戶端
public class ReverseClient {
public static void main(String[] args) throws IOException {
String host = args.length > 0 ? args[0] : "localhost";
int port = args.length > 1 ? Integer.parseInt(args[1]) : 6543;
try (Socket socket = new Socket(host, port);
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader stdIn = new BufferedReader(
new InputStreamReader(System.in))) {
System.out.println("已連線至 " + socket.getInetAddress() + ":" + socket.getPort());
String input;
while ((input = stdIn.readLine()) != null) {
out.println(input);
System.out.println("伺服器回應: " + in.readLine());
}
}
}
}
關鍵設計模式
- 每連線一執行緒:簡單但高併發需改用執行緒池
- 協定設計:行導向文字協定,易於除錯
- 資源管理:try-with-resources 確保關閉
- 異常處理:區分連線錯誤與協定錯誤
- 上一篇文章: Java Socket 網路程式設計實戰:雙向通訊與多執行緒聊天伺服器
- 下一篇文章: Java 多執行緒應用程式建構:JSR-166 並發工具包實戰指南
Copyright ©
程式碼之家 All Rights Reserved