Tomcat工作原理

当我们使用浏览器向某一个网站发起Http请求,那么在远程,当Http服务器接收到这个请求之后,会调用具

体的程序(Java类)进行处理,往不同的请求由不同的Java类完成处理,所以tomcat的工作,可以大概的分为

两部分

1.作为连接器,处理Socket连接,负责网络字节流与Request和Response对象的转化

2.加载和管理Servlet,以及具体处理Request请求

Tocmat servlet容器处理流程

1)HTTP服务器会把请求信息使用ServletRequest对象封装起来

2)进一步去调用Servlet容器中某个具体的Servlet 

3)在 2)中,Servlet容器拿到请求后,根据URL和Servlet的映射关系,找到相应的Servlet 

4)如果Servlet还没有被加载,就用反射机制创建这个Servlet,并调用Servlet的init方法来完成初始化

5)接着调用这个具体Servlet的service方法来处理请求,请求处理结果使用ServletResponse对象封装

6)把ServletResponse对象返回给HTTP服务器,HTTP服务器会把响应发送给客户端

Tomcat连接器角色

Coyote 是Tomcat 中连接器的组件名称 , 是对外的接口。客户端通过Coyote与服务器建立连接、发送请求并接受响应
Coyote作用
(1)Coyote 封装了底层的网络通信(Socket 请求及响应处理)

(2)Coyote 使Catalina 容器(容器组件)与具体的请求协议及IO操作方式完全解耦

3)Coyote 将Socket 输入转换封装为 Request 对象,进一步封装后交由Catalina 容器进行处理,处理请求完成后, Catalina 通过Coyote 提供的Response 对象将结果写入输出流

(4)Coyote 负责的是具体协议(应用层)和IO(传输层)相关内
Coyote组成
EndPoint

EndPoint 是 Coyote 通信端点,即通信监听的接口,是具体Socket接收和发送处理器,是对传输层的抽象,因此EndPoint用来实现TCP/IP协议的
Processor

Processor 是Coyote 协议处理接口 ,如果说EndPoint是用来实现TCP/IP协议的,那么Processor用来实现

HTTP协议,Processor接收来自EndPoint的Socket,读取字节流解析成Tomcat Request和Response对象,并

通过Adapter将其提交到容器处理,Processor是对应用层协议的抽
ProtocolHandler

实现针对具体协议的处理能力。Tomcat 按照协议和I/O 提供了6个实现类 : AjpNioProtocol , 

AjpAprProtocol, AjpNio2Protocol , Http11NioProtocol , Http11Nio2Protocol ,

Http11AprProtocol
Adapter

ProtocolHandler接口负责解析请求并生成Tomcat Request类。但是这个Request对象不是标准的

ServletRequest,不能用Tomcat Request作为参数来调用容器。Tomcat设计者的解决方案是引入

CoyoteAdapter,这是适配器模式的经典运用,连接器调用CoyoteAdapter的Sevice方法,传入的是Tomcat 

Request对象, CoyoteAdapter负责将Tomcat Request转成ServletRequest,再调用容器

Tomcat容器角色

可以认为整个Tomcat就是一个Catalina实例,Tomcat 启动的时候会初始化这个实例,Catalina 实例通过加

载server.xml完成其他实例的创建,创建并管理一个Server,Server创建并管理多个服务, 每个服务又可以

有多个Connector和一个Container,整体结构如下图