我的Tomcat代码是从2017年三四月份从GitHub上下载下来的,大概是Tomcat8的代码(想找Tomcat6的源码,找不到)
server:即服务器,每个tomcat程序启动后,就是一个server。
service:这是一种抽象的服务,通常是在日志或者管理时使用这样一个概念。它把连接器和处理引擎结合在一起。
connector:用于处理连接和并发,通常包括两种方式HTTP和AJP。HTTP是用于网页地址栏http这种访问方式;AJP一般用于搭配Apache服务器。
Container:可以理解为处理某类型请求的容器,处理的方式一般为把处理请求的处理器包装为Valve对象,并按一定顺序放入类型为Pipeline的管道里。Container有多种子类型:Engine、Host、Context和Wrapper,这几种子类型Container依次包含,处理不同粒度的请求。另外Container里包含一些基础服务,如Loader、Manager和Realm。
engine:处理引擎,所有的请求都是通过处理引擎处理的。
host:虚拟主机,用于进行请求的映射处理。每个虚拟主机可以看做独立的请求文件。
context:上下文,对应于web应用。
Wrapper:Wrapper是针对每个Servlet的Container,每个Servlet都有相应的Wrapper来管理。
可以看出Server、Service、Connector、Container、Engine、Host、Context和Wrapper这些核心组件的作用范围是逐层递减,并逐层包含。
配置文件中,可以看到:
Server层中,配置关闭Tomcat的命令和监听的端口,还包含了Service
Service层中,配置了Service的名称,还包含了一个实现HTTP1.1协议的Connector和一个实现AJP协议的Connector,以及Engine
Connector中,配置了访问的端口,连接超时时间
Engine中,配置realm:用于配置安全管理角色,通常读取tomcat-uesrs.xml进行验证,还包含Host
Host中,配置了主机的名称,以及应用的地址,代码变动是否自动部署,还包含Valve、Context
Valve中,配置了类AccessLogValve,是记录应用的访问日志
Context中,配了应用的路径,项目的名称。