Apache Tomcat不同访问请求对应的组件层级处理规则咨询
Tomcat 6 请求处理组件分工澄清
你的理解不符合Tomcat的实际运行逻辑,所有发向Tomcat的请求,无论来源是Apache Web Server、IIS还是普通Web浏览器,都会按顺序经过全链路的层级组件处理,不存在不同来源的请求由不同层级组件单独处理的情况。
各核心组件的通用职责
Tomcat 6的标准组件层级是固定的,每个组件的职责和请求来源无关:
- Server:Tomcat实例的顶级容器,全局唯一,负责管理整个实例的生命周期、所有Service资源
- Service:连接器(Connector)和请求处理容器的绑定集合,一个Server可部署多个Service,每个Service可独立配置多个不同协议的Connector(如HTTP Connector、AJP Connector),所有Connector收到的请求都会交给该Service绑定的唯一Engine处理
- Engine:Service下的顶级请求路由容器,会统一接收当前Service所有Connector传入的请求,根据请求头的Host字段匹配对应的虚拟主机(Host)
- Host:对应虚拟主机配置,同一个Engine下可配置多个不同域名的Host,匹配到对应Host的请求会继续根据路径前缀匹配对应的Web应用(Context)
- Context:对应单个Web应用,同一个Host下可配置多个不同路径的Context,是请求处理的最终容器,匹配到的请求会在当前Context中完成Servlet的调用处理。
误解的来源说明
你出现这个误解大概率是把连接器协议和组件职责绑定了:
- Apache Web Server、IIS和Tomcat做反向代理集成时,通常会走性能更高的AJP协议,对应Tomcat侧的AJP Connector,这类请求和浏览器直接走HTTP Connector访问的请求,唯一区别只是入口Connector不同,后续都会走Engine→Host→Context的完整处理流程
- Valve的配置是可以挂载在任意层级容器上的,你看到的不同层级Valve分布只是配置策略,比如你把访问日志Valve挂在Engine层就会记录所有请求、挂在Host层只会记录对应虚拟主机的请求、挂在Context层只会记录对应应用的请求,和请求的来源没有任何关系。
你可以做个简单的验证:分别在Engine、Host、Context层配置输出日志的Valve,不管用Apache转发、IIS转发还是浏览器直接访问,三个层级的Valve日志都会依次打印,就能验证这个逻辑。
内容的提问来源于stack exchange,提问作者bluenote1982
相关产品推荐
相关产品推荐

