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容器中的各个要害组件及其性能,在我的后续博客中会对这些组件一一进行具体介绍。
本文最先公布至微信公众号,版权所有,禁止转载!