tomcat架构组成
- tomcat有一个server,控制着整个tomcat的生命周期
- 一个server可以包含一个或者多个service,service对外提供服务
- 一个service由一个container和一个或者多个connector
- connector用于接收外部请求,并将请求封装成request,将响应封装成response。多个connector可以处理多种协议。
- container用于管理servlet,servlet用于处理request请求
tomcat结构图如下:
tomcat web.xml配置文件以及映射图
connector架构分析
- Connector如何接收请求
- Connector如何封装请求
- Connector如何将封装的reauest请求传给Container
connector结构图
根据Connector结构图:
- Connector通过Endpoint处理底层Socket网络连接
- 通过Processor将Socket请求封装成Request请求
- 通过Adaptor将Requset传递给Container处理
Container架构分析
Container如何处理Connector传过来的请求?
Container的4大组件:
- Engine:引擎,用来管理多个站点;一个service最多只能有一个Engine
- Host:代表一个站点,也叫虚拟机主机;通过配置Host可以增加站点
- Context:代表一个应用程序,或者WEB-INF目录以及其下的web.xml文件;一个host可以有多个context。
- Wrapper:每一Wrapper封装着一个Servlet,一个Context包含多个Servlet
Container架构图与目录的映射关系
访问webapp站点下的主目录可以使用host的域名,比如www.baidu.com。访问其他Context(目录),比如docs就需要域名加目录名,即www.baidu.com/docs。
Container通过责任链模式一次调用4大组件(或者叫容器)的处理链来处理Requset请求。
当执行到StandardWrapperValue的时候,会在StandardWrapperValue中创建FilterChain,并调用其doFilter方法来处理请求,这个FilterChain包含着我们配置的与请求相匹配的Filter和Servlet,其doFilter方法会依次调用所有的Filter的doFilter方法和Servlet的service方法,这样请求就得到了处理