作为web开发的你,怎能不了解tomcat
本文主要介绍Tomcat的整体架构
Tomcat主要有两部分组成:连接器Connector和容器Container。
所谓连接器就是负责接收和解析请求,然后转发给容器。
容器代表的是一类组件,它有很多层。
其中最大的是引擎Engine,它代表一个Servlet引擎。它主要的功能是将传入的请求委托给适当的虚拟机Host处理。
引擎Engine的下一层是Host,它代表一个虚拟机。Tomcat自带一个localhost的虚拟机。虚拟机有两个重要的概念域名和根目录。
域名:每个虚拟主机是由它注册的域名来标识的
根目录:根目录所在的文件夹包含将被部署到此主机的上下文。根目录可以是一个绝对路径,也可以是对CATALINA_BASE 来说的一个相对路径
为了提供对多个域名的服务,通过配置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