Tomcat是一个WEB容器,也是一个Servlet容器。他需要处理来自客户端的HTTP请求,也需要处理来自WEB服务器(Apache)的AJP请求。对于不同的请求,Tomcat将接受到的Socket,封装成为相应的Request以及与Response对象,然后再转交给容器进行具体的处理。
Tomcat的设计非常的模块化,为了提高服务本身的可扩展性,Tomcat做了组建化的设计。也实现了多个不同版本的处理方式。下列UML图中简单的描述了Tomcat的Connector容器的内部结构。
UML符号说明
Tomcat的Connector类结构图
接口ProtocolHandler负责处理各种不同协议的请求,负责将Socket流数据转换成相应的Request对象,并且构建出相应的Response对象,将数据返回这一过程。在具体处理时候,为了提高服务器的并发性将整个过程处理成两个过程,分别由AbstractEndpoint的Acceptor与SocketProcessor分别处理。Acceptor线程只是负责接收Socket请求,接收到请求之后直接转交给SocketProcessor来进行解析处理。SocketProcessor将Socket对象传递给相应的ProtocolHandler的ConnectionHandler进行Socket流的解析处理。
Processor通过适配器CoyoteAdapter调用容器的管道,每个容器都有一个某人的阀门,例如Engine容器有StandardEngineValue。每个容器处理完成本容器的事情后则将请求转交给下一个容器的阀门处理。