一、Tomcat架构
### 说明:
- Server:表示整个 Tomcat Catalina servlet 容器,Server 中可以有多个 Service。(可以通过telenet 8005后连接后输入"SHUTDOWN" 注意这里是大写,来关闭服务)
- Service:表示Connector和Engine的组合,对外提供服务,Service可以包含多个Connector和一个Engine。
- Connector:为Tomcat Engine的连接组件,支持三种协议:HTTP/1.1、HTTP/2.0、AJP。
- Container:负责封装和管理Servlet 处理用户的servlet请求,把socket数据封装成Request,传递给Engine来处理。
- Engine:顶级容器,不能被其他容器包含,它接受处理连接器的所有请求,并将响应返回相应的连接器,子容器通常是 Host 或 Context。
- Host:表示一个虚拟主机,包含主机名称和IP地址,这里默认是localhost,父容器是 Engine,子容器是 Context。
- Context:表示一个 Web 应用程序,是 Servlet、Filter 的父容器。
- Wrapper:表示一个 Servlet,它负责管理 Servlet 的生命周期,并提供了方便的机制使用拦截器。
架构组成-1
架构组成-2
二、Catalina结构
说明
Container包含了Engine、Host、Context、Wapper,它们不是平行关系,而是父子关系。
- Engine:表示整个Catalina的Servlet的引擎,一个Service只能包含一个Engine
- Host:代表一个虚拟主机或者一个站点,可以个给Tomcat配置多个虚拟主机
- Context:代表一个web应用,一个应用可以有多个Context
- Wapper: 代表一个Servlet
其实在server.xml中就包含了以上的各个组件和它们之间的关系。
三、启动流程介绍
父组件启动同时调用子组件的启动方法。记载tomcat的配置文件,初始化容器组件,监听对应的端口号,准备接受客户端请求。
在tomcat,所有的功能都被抽象成组件,他们都有一个统一的接口,就是Lifecycle接口,它的核心方法有:
- init():初始化组件
- start():启动组件
- stop():停止组件
- destroy():销毁组件
个组件默认实现如下:
四、请求处理流程介绍
1、请求处理流程
tomcat是使用mapper组件,进行请求的映射。可以看成是一个多层次的map。
五、服务器配置
1、核心配置文件server.xml
是tomcat服务器的核心配置文件,包含了tomcat中servlet(Catalina)容器的全部配置。
- Server:根标签,配置关闭端口,配置相关的监听器、全局命名和多个Service
- Service:服务名字就是Catalina,可以配置多个连接器、一个Engine
- Executor:配置tomcat线程池相关内容,如果配置则多个连接器使用一个,否则每个连接器使用自己的线程池
- Connector:连接器,可以配置port、protocol、conectionTimeout、redirectProt(https)、executor、encoding
- Engine:name、defaultHost(默认主机)、jvm(使用的虚拟机)
- Host:name、appBase(部署路径)、unpackWARs(是否解压WAR包)、autoDeploy(是否自动部署)
- Context:虚拟主机中的项目