作者知视 本文主要介绍Tomcat的整体架构 说到Tomcat大家肯定不陌生,今天我们来聊聊Tomcat,聊聊Tomcat的架构设计。 Tomcat的架构设计,就像俄罗斯套娃一样,一层套一层。如图,就是tomcat整体架构图。 Tomcat架构设计图 Tomcat主要有两部分组成:连接器Connector和容器Container。 所谓连接器就是负责接收和解析请求,然后转发给容器。 容器代表的是一类组件,它有很多层。 其中最大的是引擎Engine,它代表一个Servlet引擎。它主要的功能是将传入的请求委托给适当的虚拟机Host处理。 引擎Engine的下一层是Host,它代表一个虚拟机。Tomcat自带一个localhost的虚拟机。虚拟机有两个重要的概念域名和根目录。域名:每个虚拟主机是由它注册的域名来标识的根目录:根目录所在的文件夹包含将被部署到此主机的上下文。根目录可以是一个绝对路径,也可以是对CATALINABASE来说的一个相对路径 为了提供对多个域名的服务,通过配置Host就可以添加虚拟机。每个虚拟机Host下可以包含多个上下文Context。 虚拟机Host的下一层是上下文Context,一个Context代表一个Web应用,就是我们平常开发的一套Web应用程序。上下文是应用自定义代码(servlet、jsp)所存活的地方。 其实,在Context内部还有一层包装器Wrapper,包装器是context容器的子容器。一个Wrapper对应一个Servlet。在一个Web应用中会包含多个Servlet,来处理不同的请求。所以一个Context内部会有多个对应的包装器Wrapper。 为了很好地统一管理连接器和容器,Tomcat提供了另外两个组件:服务器Server和服务Service。 服务器Server代表完整的Tomcat实例,在Java虚拟机中它是一个单实例,主要是用来管理各个服务Service组件的生命周期的。服务器Server中可以有多个服务Service,每个服务Service都是相互独立的。 服务器Server是Tomcat中的顶级组件。可以这样说,它掌握着整个Tomcat的生死大权。 前面说到,Server代表Tomcat实例本身。那么,Service则代表具体的服务,负责对外提供服务。每个Service都是相互独立的,一个Service组件中可以有多个Connector和一个Engine,这样一来,对应的多个Connector的请求就只能由一个Engine处理。 那么,请求是如何到达Servlet的?客户端的请求首先到达的是连接器Connector连接器将请求封装成Request对象和Response对象,再将请求传递给容器请求到达容器后,容器会按照上述组件的顺序,一层一层地对请求做相应的处理最后请求会被传递给特定的Servlet Tomcat结构图