现在,我们已经成功实现了一个HttpConnector
,并且,将jdk.httpserver提供的输入输出HttpExchange
转换为Servlet标准定义的HttpServletRequest
和HttpServletResponse
接口,最终处理方法如下:
void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO
}
这样,我们就有了处理HttpServletRequest
和HttpServletResponse
的入口,回顾一下Jerrymouse设计的架构图:
┌───────────────────────────────┐
│ Jerrymouse Server │
│ ┌───────────┐ │
│ ┌─────────┐ │ Context │ │
│ │ HTTP │ │┌─────────┐│ │
◀─┼─▶│Connector│◀──▶││ Web App ││ │
│ └─────────┘ │└─────────┘│ │
│ └───────────┘ │
└───────────────────────────────┘
我们让HttpConnector
持有一个Context实例,在Context定义process(req, resp)
方法:
│
▼
┌───────────────────┐
│ HttpConnector │
└───────────────────┘
│
▼
┌───────────────────┐
│ Context │
├───────────────────┤
│process(req, resp) │
└───────────────────┘
这个Context组件本质上可以视为Servlet规范定义的ServletContext
,而规范定义的Servlet、Filter、Listener等组件,就可以让ServletContext
管理,后续的服务器设计就简化为如何实现ServletContext
,以及如何管理Servlet、Filter、Listener等组件。