引言和框架
写了几个用 Servlet 实现的 Web 服务器,直到前段时间才发现其实一直停留在新手的应用阶段,在一个学长的建议下开始尝试自己实现一个简易Servlet容器(类似于简易Tomcat)。
大致框架:
随着进一步的深入会不断进行修改,目前的意向的版本框架如下:
大致工作内容:
-
创建一个
request对象- 填充可能被所引用的
servlet使用的信息,如参数、头部、URI等 -
HTTP请求- 方法–
URI–协议/版本 - 请求的头部
- 每一个头部通过一个
CRLF来分割
- 每一个头部通过一个
- 主体内容
- 头部和主体内容之间有一个
CRLF
- 头部和主体内容之间有一个
- 方法–
- 填充可能被所引用的
-
创建一个
response对象- 所引用的
servlet使用它来给客户端发送响应 -
HTTP响应- 方法–
URI–协议/版本 - 响应的头部
- 主体内容
- 方法–
- 所引用的
-
调用
servlet的service方法- 这个是
servlet自带的五个主要方法中的一个,也是servlet生命周期的第二阶段:主要是从request对象取值然后给response对象写值 - 生命周期方法:
init->service->destroy。也代表了servlet的声明周期,从初始化到有请求的时候的service,最后释放servlet(一般发生在servlet容器关闭或者需要更多的空闲内存时候)
- 这个是
大致的工作流程:
- 等待
HTTP请求 - 对每次请求,构造一个
request和response的实例 - 当调用
servlet的时候,加载该servlet类并调用servlet的init方法(仅一次),传递request和response - 当调用的是静态资源,则调用
StaticResourceProcessor,也需要传递request和response -
servlet的销毁
一个Servlet容器中的一个Web服务器:
git地址:https://github.com/Outliwer/SimpledWebContainer