首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 在 C/S 架構中的應用:三層架構、網路類別庫與完整範例

     編輯:Java 相關知識

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 網路類別庫總覽

完整 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 確保關閉
  • 異常處理:區分連線錯誤與協定錯誤
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
套件功能
java.net基礎網路:Socket、URL、InetAddress
java.net.httpHTTP Client (Java 11+)
javax.net.sslSSL/TLS 安全通訊
java.rmi遠端方法呼叫