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

Java Socket 程式設計(五):HTTP 伺服器請求處理與 HTTPrequest 類別完整實作

     編輯:Java 相關知識

從簡易到完整的演進

簡易伺服器僅回應固定內容,完整 HTTP 伺服器需解析請求行、標頭、實體內容,並支援多種方法(GET、POST、HEAD)、狀態碼、MIME 類型對應。

HTTPrequest 類別增強版

public class HTTPrequest {
    public String method, uri, version;
    public Map headers = new HashMap<>();
    public byte[] body;
    public Socket clientSocket;
    public InputStream inputStream;

    public void parse(InputStream in) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        // 解析請求行
        String[] requestLine = reader.readLine().split("\\s+");
        method = requestLine[0];
        uri = requestLine[1];
        version = requestLine[2];

        // 解析標頭
        String line;
        while (!(line = reader.readLine()).isEmpty()) {
            int idx = line.indexOf(':');
            if (idx > 0) {
                headers.put(line.substring(0, idx).trim(),
                           line.substring(idx + 1).trim());
            }
        }

        // 讀取實體(簡化版)
        if (headers.containsKey("Content-Length")) {
            int len = Integer.parseInt(headers.get("Content-Length"));
            body = new byte[len];
            in.read(body);
        }
    }
}

關鍵改進

  • 使用 Map 替代陣列儲存標頭,O(1) 查找
  • 支援請求實體讀取(POST 資料)
  • 分離解析邏輯,便於單元測試
  • 編碼處理:標頭用 ISO-8859-1,實體依 Content-Type

後續擴充方向

  • URL 解碼與路徑正規化(防止目錄遍歷攻擊)
  • Cookie 解析與 Session 管理
  • 多部分表單資料解析
  • 請求驗證與限流

此類別為靜態資源伺服器、Servlet 容器、REST API 框架的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved