Tomcat工作原理

作者: 尚硅谷教育 | 来源:发表于2018-10-09 09:39 被阅读224次

Servlet 容器“Container”
Container 是容器的父接口,所有子容器都必须实现这个接口,Container 容器的设计用的是典型的责任链的设计模式,它有四个子容器组件构成,分别是:Engine、Host、Context、Wrapper,这四个组件不是平 行的,而是父子关系,Engine 包含 Host,Host 包含 Context,Context 包含 Wrapper。通常一个 Servlet class 对应一个 Wrapper,如果有多个 Servlet 就可以定义多个 Wrapper,如果有多个 Wrapper 就要定义一个更高的 Container 了,如 Context,Context 通常就是对应下面这个配置:
<Context
path="/library"
docBase="D:\projects\library\deploy\target\library.war"
reloadable="true"
/>
容器的总体设计
Context 还可以定义在父容器 Host 中,Host 不是必须的,但是要运行 war 程序,就必须要 Host,因为 war 中必有 web.xml 文件,这个文件的解析就需要 Host 了,如果要有多个 Host 就要定义一个 top 容器 Engine 了。而 Engine 没有父容器了,一个 Engine 代表一个完整的 Servlet 引擎。
那么这些容器是如何协同工作的呢?先看一下它们之间的关系图:


image.png

当 Connector 接受到一个连接请求时,将请求交给 Container,Container 是如何处理这个请求的?这四个组件是怎么分工的,怎么把请求传给特定的子容器的呢?又是如何将最终的请求交给 Servlet 处理。下面是这个过程的时序图:


image.png
这 里看到了 Valve 是不是很熟悉,没错 Valve 的设计在其他框架中也有用的,同样 Pipeline 的原理也基本是相似的,它是一个管道,Engine 和 Host 都会执行这个 Pipeline,您可以在这个管道上增加任意的 Valve,Tomcat 会挨个执行这些 Valve,而且四个组件都会有自己的一套 Valve 集合。您怎么才能定义自己的 Valve 呢?在 server.xml 文件中可以添加,如给 Engine 和 Host 增加一个 Valve 如下:
<Engine defaultHost="localhost" name="Catalina">
<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
………
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" 
    xmlNamespaceAware="false" xmlValidation="false">

    <Valve className="org.apache.catalina.valves.FastCommonAccessLogValve"
        directory="logs"  prefix="localhost_access_log." suffix=".txt"
        pattern="common" resolveHosts="false"/>    
…………
</Host>

</Engine>
StandardEngineValve 和 StandardHostValve 是 Engine 和 Host 的默认的 Valve,它们是最后一个 Valve 负责将请求传给它们的子容器,以继续往下执行。
前面是 Engine 和 Host 容器的请求过程,下面看 Context 和 Wrapper 容器时如何处理请求的。下面是处理请求的时序图:


image.png

从 Tomcat5 开始,子容器的路由放在了 request 中,request 中保存了当前请求正在处理的 Host、Context 和 wrapper。

本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源,欢迎大家关注尚硅谷公众号(atguigu)了解更多。

相关文章

  • tomcat 工作原理

    转自 本文以 Tomcat 5 为基础,也兼顾最新的 Tomcat 6 和 Tomcat 4。Tomcat 的基本...

  • tomcat 工作原理

    以下是servlet的作用 Servlet的调用 Tomcat的工作模式3种:独立Servlet,进程内servl...

  • Tomcat工作原理

    Servlet 容器“Container”Container 是容器的父接口,所有子容器都必须实现这个接口,Con...

  • Tomcat

    Apache-Tomcat 关系 web服务器工作原理 Tomcat Web 3大件 Tomcat 处理 http...

  • 使用Logrotate分隔Tomcat工作日志

      本文不涉及Tomcat访问日志,仅对Tomcat工作日志进行了分隔,原理相同。Tomcat工作日志配置文件为t...

  • 理解Tomcat工作原理

    WEB服务器 只要Web上的Server都叫Web Server,但是大家分工不同,解决的问题也不同,所以根据We...

  • Tomcat Servlet 工作原理

    简单叙述Tomcat Servlet工作原理,做一下笔记。 Servlet Servlet有很多种实现,例如:Je...

  • Tomcat 的工作原理

    你还记得 Tomcat 的工作原理么 动力节点在线[https://www.zhihu.com/org/wa-ke...

  • Servlet和JSP

    1、Servlet的工作原理 Servlet由tomcat服务器负责管理,Tomcat服务器通过读取web.xml...

  • 深入理解SpringMVC(一)----SpringMVC的初始

    Tomcat 基础 在介绍spring mvc的工作原理之前,有必要介绍下web容器的一种Tomcat。Tomca...

网友评论

    本文标题:Tomcat工作原理

    本文链接:https://www.haomeiwen.com/subject/gdfeaftx.html