乐趣区

关于java:学习Tomcat一之容器概览

Tomcat 是 Apache 软件基金会的一个顶级我的项目,由 Apache、Sun 和其它一些公司及集体共同开发,是目前比拟风行的 Web 服务器之一。Tomcat 是一个开源的、小型的轻量级应用服务器,具备占用系统资源少、扩展性好、功能丰富等长处。尽管 Tomcat 是一个轻量级容器,然而其自身实现还比较复杂,蕴含很多模块,本文会对 Tomcat 的根本构造和各个模块进行简略介绍。

Servlet 容器概念

Servlet 容器也叫做 Servlet 引擎,是 Web 服务器或应用程序服务器的一部分,用于在发送的申请和响应之上提供网络服务,解码基于 MIME 的申请,格式化基于 MIME 的响应。Servlet 没有 main 办法,不能独立运行,它必须被部署到 Servlet 容器中,由容器来实例化和调用 Servlet 的办法(如 doGet() 和 doPost()),Servlet 容器在 Servlet 的生命周期内容纳和治理 Servlet。在 JSP 技术 推出后,治理和运行 Servlet/JSP 的容器也称为 Web 容器。

以下为 Servlet 接口的定义:

public interface Servlet {void init(ServletConfig var1) throws ServletException;

    ServletConfig getServletConfig();

    void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

    String getServletInfo();

    void destroy();}

Tomcat 构造概览

Tomcat 是一个成熟的 Web 服务器,设计和开发都比拟优雅,性能构造也是模块化的。Servlet 容器应该有三个根本工作:创立 Request 对象、创立 Response 对象和 Servlet 解决申请响应,基于这三个工作 Tomcat 划分出两个外围模块:连接器和容器。为了优雅的进行容器的生命周期治理,Tomcat 又增加了服务器组件模块。各个模块之间的关联关系如下图所示:

![Tomcat 容器概览]

服务器组件 Server

Server 提供了 Tomcat 的生命周期治理的逻辑,它应用了一种优雅的形式来启动 / 敞开整个零碎,不须要再对连接器和容器别离启动 / 敞开。

当服务器组件启动的时候,它会启动其中的所有的组件(连接器和容器),而后就开始无限期的期待敞开命令。如果须要关闭系统,能够向指定端口发送一条敞开命令,服务器组件在收到敞开命令后,会敞开其中所有的组件。

服务组件 Service

服务器组件应用了服务组件 Serivce 来蕴含其它的组件,服务组件次要蕴含两局部:连接器和容器,这两局部也是 Tomcat 容器的外围组件。

连接器 Connector

Connector 的主要职责就是负责接管客户端连贯和客户端申请的解决加工。每个 Connector 都将指定一个端口进行监听,别离负责对申请报文的解析和响应报文组装,解析过程生成 Request 对象,而组装过程波及 Response 对象。

如果将 Tomcat 整体比作一个微小的城堡,那么 Connector 组件就是城堡的城门,每个人要进入城门就必须通过城门,它为人们进出城堡提供了通道。同时,一个城堡还可能有两个或者多个城门,每个城门代表了不同的通道 (不同的网络协议)。

容器 Container

咱们晓得 Tomcat 是 Servlet 容器的一种实现,servlet 又是什么呢?Servlet 是 javax.servlet 包中定义的接口。它申明了 Servlet 生命周期的三个根本办法:init()、service() 和 destroy()。它们由每个 Servlet Class(在 SDK 中定义或自定义)实现,并由服务器在特定机会调用。

Tomcat 容器中的 Container 的次要性能就是解决连接器 Connector 解析的到的 Request,调用对应的 servlet 办法,将响应写入 Response 中。此外 Tomcat 还对容器增加了管道和域的概念,用于对申请进行预处理。Tomcat 中的容器分为四大类,依照蕴含关系顺次为:Engin 容器、Host 容器、Context 容器和 Wrapper 容器。

生命周期

Tomcat 容器的启停实现逻辑,启停操作是如何从 Server 流传到各个子容器和组件中的。以及 Spring 容器如何对 Tomcat 容器实现优雅敞开:期待 Tomcat 容器中的申请解决实现之后再敞开容器。

总结

本文简要介绍了 Tomcat 容器中的各个要害组件及其性能,在我的后续博客中会对这些组件一一进行具体介绍。

本文最先公布至微信公众号,版权所有,禁止转载!

退出移动版