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接口的定义:publicinterfaceServlet{voidinit(ServletConfigvar1)throwsServletException;ServletConfiggetServletConfig();voidservice(ServletRequestvar1,ServletResponsevar2)抛出ServletException,IOException;Tomcat结构概述Tomcat是一个成熟的Web服务器,设计开发优雅,功能结构模块化。Servlet容器应该有三个基本任务:创建Request对象、创建Response对象和Servlet处理请求响应。基于这三个任务,Tomcat划分了两个核心模块:连接器和容器。为了优雅地管理容器的生命周期,Tomcat增加了一个服务器组件模块。各个模块之间的关系如下图所示:![Tomcat容器概述]服务器组件ServerServer提供了Tomcat生命周期管理的逻辑。它使用一种优雅的方式启动/关闭整个系统,无需分别启动/关闭连接器和容器。当服务器组件启动时,它会启动其中的所有组件(连接器和容器),然后无限期地等待关闭命令。如果需要关闭系统,可以向指定端口发送shutdown命令,server组件收到shutdown命令后会关闭其中的所有组件。服务组件服务服务器组件使用服务组件Serivce来包含其他组件。服务组件主要包括连接器和容器两部分,它们也是Tomcat容器的核心组件。连接器ConnectorConnector的主要职责是接收客户端连接和处理客户端请求。每个Connector都会指定一个端口进行监听,分别负责解析请求报文和组装响应报文。解析过程产生一个Request对象,组装过程涉及到Response对象。如果把Tomcat整体比作一座巨大的城堡,那么Connector组件就是城堡的大门。每个人都必须通过大门才能进入大门。它为人们进出城堡提供了通道。同时,一个城堡可能有两个或更多的门,每个门代表不同的通道(不同的网络协议)。Container容器我们知道Tomcat是Servlet容器的一种实现,什么是servlet?Servlet是在javax.servlet包中定义的接口。它声明了Servlet生命周期的三个基本方法:init()、service()和destroy()。它们由每个ServletClass(在SDK中定义或自定义)实现,并在特定时间由服务器调用。Container在Tomcat容器中的主要作用是处理Connector解析出的Request,调用相应的servlet方法,将response写入Response。此外,Tomcat还在容器中加入了pipeline和domain的概念,用于对请求进行预处理。Tomcat中的容器分为四类,按包含顺序依次为:Engin容器、Host容器、Context容器和Wrapper容器。Tomcat容器生命周期的启停实现逻辑,启停操作如何从Server传播到各个子容器和组件。以及Spring容器如何实现Tomcat容器的优雅关闭:等待Tomcat容器中的请求处理完成后再关闭容器。小结本文简单介绍了Tomcat容器中的关键组件及其作用,我会在后续的博客中详细介绍这些组件。本文首发于微信公众号,版权所有,禁止转载!
