天天看点

tomcat中间件入门学习(一)

之前没有花太多的时间来仔细研究tomcat中间件是如何处理请求并响应给客户端的,今天研究了一下,处女稿欢迎拍砖。

tomcat从高度抽象来看可以分为两大部分,第一部分是负责对客户端发出的请求的报文的解析等工作的Connector组件。第二部分是负责根据请求的内容进行相应的逻辑处理并响应结果给客户端的Container组件。

处理流程:

Connector组件包含:Http11Protocol组件、Mapper组件和CoyoteAdaptor组件。Http11Protocol组件又包含JioEndpoint组件和Http11Processor组件。JioEndpoint组件包含了Acceptor组件和Excutor线程池

Container组件没有明确的声明,它包含了4个级别的组件是从大到小包含关系:分别是Engine组件、Host组件、Context组件和Wrapper组件。

1.当tomcat启动后,Connector组件中的Acceptor组件将会监听是否有客户端套接字连接并接受Socket。

2.当监听到客户端连接后,把连接交由Executor处理交由Http11Processor组件和Mapper组件。

3.Http11Processor组件解析请求中的报文信息,把对应的HTTP协议请求头,请求体封装成Request对象,进而可以使后续程序判断从Request对象中拿到相关的信息。

4.Mapper组件根据HTTP协议请求行的URL属性和请求头的Host属性匹配该请求应该交由哪个Host容器,哪个context容器和哪个Wrapper容器处理请求。其实就是根据请求确定好应该选择程序中的哪个serverlet。并且把路由路径也封装到Request对象中,便于后续直接根据Request对象选择对应的容器。

5.CoyoteAdaptor组件负责将Connector组件和Engine容器相连接,类似管道的模型传递之前封装好的Request对象和Response对象。就是说到这里请求的Request对象和Response对象已经实例化。

6.Engine容器会对请求进行层层过滤处理,在tomcat中的名词叫做管道和阀门,经过层层阀门过滤后,最后执行EngineValve阀门调用Host容器的管道。Engine的功能包括处理Engine级别一些监听,处理访客记录,集群处理部分的用户密码权限资源认证等

7.Host容器也像Engine容器一样的逻辑,经过层层阀门处理,最后调用基础阀门HostValve调用Context容器。Host的功能包括处理Host级别一些监听,处理访客记录,集群处理部分的用户密码权限资源认证等。

8.Context容器也是经过过滤后通过ContextValve调用Wrapper容器的管道。Context的功能包括处理Context级别一些监听,处理访客记录,集群处理部分的用户密码权限资源认证等。还包含了维护回话的生成更新和销毁。加载Web应用资源,不同应用的隔离处理。解析Tomcat配置文件server.xml和Web应用的context.xml文件,读取到内存中。处理Serverlet映射,路由导航选择。

9.Wrapper容器也是经过阀门过滤后,调用基础阀门WrapperValve选择对应的Servlet对象,经过部署的程序的业务逻辑处理后,把结果输出到客户端。每一个Wrapper其实就是程序中的每个serverlet。