> 文档中心 > Tomcat的结构+处理url请求原理

Tomcat的结构+处理url请求原理


1Tomcat如何处理请求

Tomcat内部结构图

在这里插入图片描述

  • Server:Tomcat最顶层的容器,一个Server可以包含多个Service
  • Service:一个Service包含多个Connector和一个Container
    • Connector用于处理连接相关的事情,并提供Socket与Request和Response相关的转化
    • Container用于封装和管理Servlet,以及具体处理Request请求
  • Container包含了四个子容器
    • Engine:引擎,用来管理多个站点,一个Service最多只能有一个Engine
    • Host:代表一个站点,也可以叫虚拟主机,通过配置Host就可以添加站点。Tomcat目录下整个webapps就是一个Host站点
    • Context:代表一个应用程序,对应着平时开发的一套程序,或者一个WEB-INF目录以及下面的web.xml文件。Tomcat中默认的配置下webapps下的每一个文件夹目录都是一个Context
    • Wrapper:每一Wrapper封装着一个Servlet
      在这里插入图片描述

处理URL流程分析

如上图模拟请求http://127.0.0.5:8080/demo/user,流程如下:

  • 客户端(或游览器)发送请求至主机的端口8080, 被tomcat在该端口中监听的http/1.1 connector 8080所接收
  • Connector将该请求交给它所在的service中的engine来负责处理,并等待engine的回应
  • Engine获得请求之后从报文头提取主机名称(127.0.0.5), 在所有虚拟主机Host当中寻找匹配
  • 在未匹配到同名虚拟主机的情况下,Engine将该请求交给名为localhost的默认虚拟主机Host处理
  • Host获得请求之后将根据URL(/demo/user)中的context-path的取值/demo去匹配它拥有的所有context,将请求交给代表应用demo的context去处理;
  • context会去构建httpservletrequest和httpservletresponse对象,将其作为参数调用应用demo,由应用完成业务逻辑执行、结果数据存储等过程,等待应用数据;
  • context接收到应用返回的httpservletresponse对象之后返回给host;
  • host将httpservletresponse对象返回给engine;
  • engine将httpservletresponse对象返回给connector;
  • connector将httpservletresponse对象返回给客户端(或游览器)