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

Java Socket 網路程式設計(五):打造簡易 HTTP Web 伺服器

     編輯:Java 程式設計入門

架構設計

簡易 Web 伺服器需解析並儲存 HTTP 請求標頭,為後續處理奠基。核心在於 HTTPrequest 類別,封裝請求的所有資訊:版本、方法、請求檔案、客戶端 Socket、輸入流、標頭鍵值對陣列。

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;
    public NameValue[] headerpairs;

    public HTTPrequest() {
        version = method = file = null;
        clientSocket = null;
        inbound = null;
        headerpairs = new NameValue[0];
    }

    // 動態擴充標頭陣列
    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 npe) {
            System.out.println("NullPointerException while adding name-value: " + npe);
        }
    }

    @Override
    public String toString() {
        String s = method + " " + file + " " + version + " ";
        for (NameValue nv : headerpairs) s += nv + " ";
        return s;
    }
}

NameValue 輔助類別

簡單封裝 name 與 value 兩個字串。每次新增標頭時,HTTPrequest 會建立新陣列、複製舊資料、加入新元素,再替換引用。雖非最高效(可改用 ArrayList),但清晰展示動態陣列擴充邏輯。

後續擴充方向

  • 完善 HTTP 協定解析(支援 POST、Header 完整解析、Chunked 編碼等)。
  • 實作 HTTPresponse 類別,封裝狀態碼、回應標頭、實體內容輸出。
  • 引入多執行緒或 NIO(Selector)提升併發能力。
  • 支援靜態資源映射、Servlet 容器介面、虛擬主機等企業級特性。

此範例為教學示範,生產環境建議採用成熟伺服器(Tomcat、Jetty、Undertow)或 Netty 等高效能網路框架。

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