b/s(浏览器/服务器模式) 浏览器是客户端(发送http请求) ———> 服务器端
第 1 节 浏览器访问服务器的流程

第 2 节 Tomcat 系统总体架构
2.1 Tomcat 请求处理⼤致过程
Tomcat是一个Http服务器(能接收并且处理http请求)
流程如下
HTTP服务器接收到请求之后请求交给Servlet容器来处理,Servlet容器通过Servelet接口调用业务类,Servlet接口和Servlet容器这一整套内容叫作Servlet规范
注意:Tomcat既按照Servlet规范实现了Servlet容器,同时具有HTTP服务器的功能
Tomcat的两个身份:
1.Http服务器
2.是一个Servlet容器
2.2 Tomcat Servlet容器处理流程
当用户请求某个URL资源时:
1.Tomcat会将请求信息servletRequest对象封装起来
2.进一步调用Servlet容器中的某个具体Servlet
3,在2中,Servlet容器会根据URL和Servlet的映射关系,找到相应的Servlet
4.如果Servlet还没有被加载,就用反射机制创建这个Servlet,并调用Servlet的init方法来完成初始化
5.接着调用这个具体Servlet的servic方法来处理请求,请求处理结果使用ServletResponse对象封装
6.把ServetResponse对象返回给HTTP服务器,HTTP服务器会把相应发送给客户端
2.3 Tomcat 系统总体架构
Tomcat两个重要功能:
1.和客户端进行socket通信。将字节流和Request/Response等对象进行转换
2.Servlet容器处理业务逻辑
Tomcat 设计了两个核⼼组件连接器(Connector)和容器(Container)来完成 Tomcat 的两⼤核⼼功能连接器(Connector):负责对外交流,处理Socket连接,负责⽹络字节流与Request和Response对象的转化;容器(container):负责内部处理:加载和管理Servlet,以及具体处理Request请求;
第 3 节 Tomcat 连接器组件 Coyote
3.1 Coyote 简介
Coyote 是Tomcat 中连接器的组件名称 , 是对外的接⼝。客户端通过Coyote与服务器建⽴连接、发送请 求并接受响应 。
(1)Coyote 封装了底层的⽹络通信(Socket 请求及响应处理)
(2)Coyote 使Catalina 容器(容器组件)与具体的请求协议及IO操作⽅式完全解耦
(3)Coyote 将Socket 输⼊转换封装为 Request 对象,进⼀步封装后交由Catalina 容器进⾏处理,处
理请求完成后, Catalina 通过Coyote 提供的Response 对象将结果写⼊输出流
(4)Coyote 负责的是具体协议(应⽤层)和IO(传输层)相关内容


Tomcat Coyote ⽀持的 IO模型与协议
Tomcat⽀持多种应⽤层协议和I/O模型,如下:
在 8.0 之前 ,Tomcat 默认采⽤的I/O⽅式为 BIO,之后改为 NIO。 ⽆论 NIO、NIO2 还是 APR, 在性
能⽅⾯均优于以往的BIO。 如果采⽤APR, 甚⾄可以达到 Apache HTTP Server 的影响性能
3.2 Coyote 的内部组件及流程
Coyote 组件及作⽤
1.EndPoint
EndPoint 是 Coyote 通信端点,即通信监听的接⼝,是具体Socket接收和发 送处理器,是对传输层的抽象,因此EndPoint⽤来实现TCP/IP协议的
2.Processor
Processor 是Coyote 协议处理接⼝ ,如果说EndPoint是⽤来实现TCP/IP协 议的,那么Processor⽤来实现HTTP协议,Processor接收来⾃EndPoint的 Socket,读取字节流解析成Tomcat Request和Response对象,并通过 Adapter将其提交到容器处理,Processor是对应⽤层协议的抽象
3.ProtocolHandler
Coyote 协议接⼝, 通过Endpoint 和 Processor , 实现针对具体协议的处 理能⼒。Tomcat 按照协议和I/O 提供了6个实现类 : AjpNioProtocol , AjpAprProtocol, AjpNio2Protocol , Http11NioProtocol , Http11Nio2Protocol ,Http11AprProtocol
4.Adapter
由于协议不同,客户端发过来的请求信息也不尽相同,Tomcat定义了⾃⼰的 Request类来封装这些请求信息。ProtocolHandler接⼝负责解析请求并⽣成 Tomcat Request类。但是这个Request对象不是标准的ServletRequest,不 能⽤Tomcat Request作为参数来调⽤容器。Tomcat设计者的解决⽅案是引 ⼊CoyoteAdapter,这是适配器模式的经典运⽤,连接器调⽤ CoyoteAdapter的Sevice⽅法,传⼊的是Tomcat Request对象, CoyoteAdapter负责将Tomcat Request转成ServletRequest,再调⽤容器
第 4 节 Tomcat Servlet 容器 Catalina
第 5 节Tomcat服务器核心配置详解
问题⼀:去哪⼉配置? 核⼼配置在tomcat⽬录下conf/server.xml⽂件
问题⼆:怎么配置?
注意:
- Tomcat 作为服务器的配置,主要是 server.xml ⽂件的配置;
- server.xml中包含了 Servlet容器的相关配置,即Catalina 的配置;
- Xml ⽂件的讲解主要是标签的使⽤
主要标签结构如下:
<!--
Server 根元素,创建⼀个Server实例,⼦标签有 Listener、GlobalNamingResources、
Service
-->
<Server>
<!--定义监听器-->
<Listener/>
<!--定义服务器的全局JNDI资源 -->
<GlobalNamingResources/>
<!--
定义⼀个Service服务,⼀个Server标签可以有多个Service服务实例
-->
<Service/>
</Server>
Server 标签