HttpServer.await() 監聽 8080 端口,接收 Socket。InputStream 解析請求 URI,構建自定義 Request 對象。OutputStream 構建 Response,調用 sendStaticResource() 返回靜態頁面。所有 Servlet 必須實現:
public interface Servlet {
void init(ServletConfig config);
ServletConfig getServletConfig();
void service(ServletRequest req, ServletResponse res);
String getServletInfo();
void destroy();
}
生命周期:init(一次)→ 多次 service → destroy(卸載時)。
Class.forName 或 URLClassLoader),實例化並調用 init。ServletRequest、ServletResponse 實例(實現標準接口)。service(req, res)。destroy 並卸載類。使用 URLClassLoader 指定 repository(類目錄),調用 loadClass 加載 Servlet 類。注意雙親委派模型:若 classpath 已有同名類,無法加載 repository 中的版本。
HttpServer:監聽端口,分發請求。Request / Response:實現 ServletRequest/ServletResponse 接口,多數方法留空。ServletProcessor:處理 Servlet 請求,加載類、調用 service。StaticResourceProcessor:處理靜態資源請求。建議抽象 Processor 接口統一兩者。
// HttpServer.await()
while (true) {
Socket socket = serverSocket.accept();
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
Request request = new Request(is);
request.parse(); // 解析 URI 等
Response response = new Response(os);
response.setRequest(request);
if (request.getUri().startsWith("/servlet/")) {
ServletProcessor processor = new ServletProcessor();
processor.process(request, response);
} else {
StaticResourceProcessor processor = new StaticResourceProcessor();
processor.process(request, response);
}
socket.close();
}
第二章確立了 Tomcat 核心架構:標準 Servlet API 接口、類加載器隔離、請求分發處理器模式。這為後續章節的連接器、容器、生命周期管理奠定基礎。