手写Tomcat

Jerrymouse Server设计目标如下:

  • 支持Servlet 6的大部分功能:
    • 支持Servlet组件;
    • 支持Filter组件;
    • 支持Listener组件;
    • 支持Sesssion(仅限Cookie模式);
    • 不支持JSP;
    • 不支持async模式与WebSocket; 可部署一个标准的Web App; 不支持同时部署多个Web App; 不支持热部署。

image.png

请求

GET /hello HTTP/1.1
Host: www.example.com
User-Agent: curl/7.88.1
Accept: */*

响应

HTTP/1.1 200 OK
Server: Simple HttpServer/1.0
Date: Fri, 07 Jul 2023 23:15:09 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 22
Connection: keep-alive

<h1>Hello, world.</h1>

HTTP Server实际上就是:

监听TCP端口,等待浏览器连接; 接受TCP连接后,创建一个线程处理该TCP连接:

  1. 接收浏览器发送的HTTP请求;
  2. 解析HTTP请求;
  3. 处理请求;
  4. 发送HTTP响应; 重复1~4直到TCP连接关闭。