建立一個功能完整的 Web 伺服器,第一步是設計封裝 HTTP 請求資訊的類別。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 實現標頭欄位動態新增toString() 方便除錯與日誌記錄此類別為後續實作靜態資源服務、動態請求分派奠定基礎。實際部署時需加入請求驗證、快取控制、壓縮傳輸等企業級功能。