Tomcat
郭旭升 Lv6

如何设计一个web容器

思路比具体实现更重要。 学习把重点放在顶层设计。
学习一项技术,需要了解其完整的体系。看完一本书或者一个教程,获取完整的基础知识。

web容器提供两种服务,

  1. 静态资源的访问 (三个组件,request、HttpServer、Response)
    直接通过访问根路径 + 静态资源名称访问
  2. servlet的访问
    在访问根路径上加上servlet路径来做区分,将这类的请求委托给ServletProcessor来处理。

Servlet

为了java实现动态可交互网页,web编程的一套标准。

核心功能:

  1. 创建并填充Request对象,URI、参数、Method、请求头Header,请求体body等信息
  2. 创建response对象
  3. 执行业务逻辑,将结果通过Response的输出流传到客户端。

Servlet没有main方法,所以执行需要一个容器,容器为了支持Servlet的功能而存在。 Tomcat就是一个Servlet容器的实现。

Tomcat整体架构

组件角度:

  • Server:服务器,启动和停止系统。一切包含在Server中。
  • Service:服务,Server可以运行多个服务。
  • Container: 容器,servlet容器。 engine(引擎)、host(主机)、context(上下文)、wraper(包装器)都继承自Container接口,所以它们都是容器。
  • Connecter:连接器,service和container连接起来。把客户端的请求转发到Container(容器)。

一次完整的请求角度
客户端的请求http://localhost:8080/test/index.jsp,

  • 发送到本地端口,被侦听的Connector获取,然后
  • Connector将请求交给它所在的Service的engine来处理,等待Engine来回应;
  • engine获取请求,匹配到所有虚拟主机Host,交给host匹配到路径为/Test的Context去处理,
  • Path=/test的Context获取请求index.jsp,Mapping table中对应寻找servlet。
  • Context匹配到对应的JspServlet,构造HttpServletRequest和HttpServletResponse对象,作为参数调用JspServlet的doGet和doPost方法。
  • Context将执行完的HttpServletResponse返回给host
  • host将HttpServletResponse对象返回给Engine
  • Engine将HttpServletResponse对象返回给Connector
  • Connector把HttpServletResponse对象返回给客户browser
 Comments