实现Servlet组件

廖雪峰
资深软件开发工程师,业余马拉松选手。

现在,我们已经成功实现了一个HttpConnector,并且,将jdk.httpserver提供的输入输出HttpExchange转换为Servlet标准定义的HttpServletRequestHttpServletResponse接口,最终处理方法如下:

void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO
}

这样,我们就有了处理HttpServletRequestHttpServletResponse的入口,回顾一下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等组件。



Comments

Loading comments...