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

Java Socket 程式設計(五):簡易 HTTP 伺服器與請求解析類別設計

     編輯:Java 相關知識

HTTP 伺服器核心架構

建立一個功能完整的 Web 伺服器,第一步是設計封裝 HTTP 請求資訊的類別。HTTPrequest 類別需包含請求方法、資源路徑、協定版本、標頭欄位等完整資訊,並提供解析與存取介面。

HTTPrequest 類別實作

import java.io.*;
import java.util.*;
import java.net.*;

public class HTTPrequest {
    public String version;
    public String method;
    public String file;
    public Socket clientSocket;
    public DataInputStream inbound;
    private NameValue[] headerPairs = new NameValue[0];

    public HTTPrequest() {
        version = method = file = null;
        clientSocket = null;
        inbound = null;
    }

    public void addNameValue(String name, String value) {
        try {
            NameValue[] temp = new NameValue[headerPairs.length + 1];
            System.arraycopy(headerPairs, 0, temp, 0, headerPairs.length);
            temp[headerPairs.length] = new NameValue(name, value);
            headerPairs = temp;
        } catch (NullPointerException e) {
            System.err.println("加入標頭失敗: " + e);
        }
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(method).append(' ').append(file).append(' ').append(version).append('\n');
        for (NameValue nv : headerPairs) {
            sb.append(nv).append('\n');
        }
        return sb.toString();
    }
}

class NameValue {
    String name, value;
    NameValue(String n, String v) { name = n; value = v; }
    @Override public String toString() { return name + ": " + value; }
}

關鍵設計重點

  • 動態陣列擴充:使用 System.arraycopy 實現標頭欄位動態新增
  • 資料封裝:將 Socket、輸入流與解析後資料整合在單一物件
  • 擴充性:toString() 方便除錯與日誌記錄

此類別為後續實作靜態資源服務、動態請求分派奠定基礎。實際部署時需加入請求驗證、快取控制、壓縮傳輸等企業級功能。

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