Tomcat 请求过程(详细)

Posted 杰西聊Java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat 请求过程(详细)相关的知识,希望对你有一定的参考价值。

Tomcat 配置

Tomcat是一个基于组件形式的的Web容器,由Server(服务器)、Service(服务)、Connector(连接器)、Engine(引擎)、Host(主机)、Context(应用服务)组成,它们在server.xml里的配置如下:

 
   
   
 
  1. <?xml version="1.0" encoding="UTF-8"?>

  2. <Server port="8005" shutdown="SHUTDOWN">

  3.  <Service name="Catalina">

  4.    <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

  5.    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>

  6.    <Engine defaultHost="localhost" name="Catalina">

  7.      <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">

  8.      <Context docBase="src-ConsumptionAnalysisSystem" path="/ConsumptionAnalysisSystem" reloadable="true" source="org.eclipse.jst.jee.server:src-ConsumptionAnalysisSystem"/>

  9.      </Host>

  10.    </Engine>

  11.  </Service>

  12. </Server>

(可左右滑动)

Tomcat 组件

Server:代表整个Tomcat,它包含所有的容器;

Service:相当于一个集合,包含多个Connector(连接)、一个Engine(引擎),它还负责处理所有Connector(连接)获取的客户端请求;

Connector:一个Connector(连接)在指定的接口上侦听客户端请求,并将客户端请求交给Engine(引擎)来进行处理并返回执行结果;

Engine:一个Engine(引擎)下可以配置多个虚拟主机Host,每个主机都有一个域名,当Engine获得一个请求时,会把这个请求发送的相应的Host上,Engine有一个默认的虚拟主机,如果没有虚拟主机能够匹配这个请求,那就由这个默认的虚拟主机来进行处理;

Host:代表一个Virtual host,每个虚拟主机都和某个网络域名相匹配,每个虚拟主机下面可以部署一个或者多个web app,每个web对应一个context,有一个context path,当一个host获取请求时,就把该请求匹配到某个context上;

Context:一个Context对应一个web application,一个web由一个或多个servlet组成,Context在创建的时候将根据配置文件CATALINAHOME/conf/web.xml和WEBAPPHOME/WEB-INF/web.xml载入servlet类,当Context获取到请求时,将在自己的映射表中查找相匹配的servlet类,如果找到,则执行该类,并返回结果。

Tomcat 处理请求

现在让我们来模拟一下Tomcat处理一个Http请求的过程:

设置一个来自客户端URL:http://localhost:8080/webgateway/index

① 服务器8080端口接收到客户端发来的请求,被一个在那里监听的叫HTTP1.1的Connector获取了这个链接请求; ② Connector把请求交给同在Service下的Engine去处理,并等待Engine的响应; ③ Engine把url解析,并把请求传给相对应的Host处理,如果没有相对应的Host,则用默认名叫localhost的Host来处理; ④ Host再把url解析为/webgateway/index.html,匹配context-path为/webgateway的Context去处理(如果匹配不到就把该请求交给路径名为””的Context去处理); ⑤ context-path为/webgateway的Context会匹配Servlet Mapping为/index的Servlet处理; ⑥ 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用Servlet的doGet或doPost方法; ⑦ Context把处理完的HttpServletResponse对象返回给Host; ⑧ Host把HttpServletResponse对象返回给Engine; ⑨ Engine把HttpServletResponse对象返回给Connector; ⑩ Connector把HttpServletResponse对象返回给客户browser。


以上是关于Tomcat 请求过程(详细)的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat详细部署

tomcat的一次请求过程

Tomcat请求解析-请求行和请求头

jsp页面被tomcat引擎运行的时候组装成java片段,但是这些java片段怎么没有main方法作为程序的入口啊?

深入理解Tomcat系列之五:Context容器和Wrapper容器

详解Tomcat的安装和优化