Tomcat连接器和servlet容器

Http工作原理

Http协议是 浏览器和服务器之间的数据传送协议、应用层协议;不涉及数据包传输、规定客户端和服务器之间的通信格式

Tomcat整体架构

@Http服务器请求处理
浏览器给服务端一个Http格式的请求
Http服务器收到后需要调用程序处理(Java类),一般不同请求需要不同程序处理

上图中左右两图对比,
1) HTTP服务器直接调用具体业务类=>紧耦合
2) HTTP服务器把请求交给容器处理,容器通过servlet接口调用业务类 => HTTP服务器与业务解耦

@Servlet容器工作流程

客户请求某个资源
HTTP服务器用一个ServletRequest对象把客户的请求封装 -> 发送给Servlet容器
Servlet容器收到请求 -> 根据请求的URL和Servlet的映射关系,找到相应的Servlet -> 调用Servlet的service方法处理请求
Servlet容器把ServletResponse对象返回给HTTP服务器
HTTP服务器把响应发送给客户端

@Tomcat整体架构
Tomcat的两个核心功能
1 )处理socket连接,负责网络字节流与Request和Response对象的转化 => 连接器(Connector),负责对外交流
2 加载和管理Servlet,处理Request请求 => 容器(Container),负责内部处理

Coyote

Coyote是Tomcat连接器的框架名称
Coyote封装了底层的网络通信(Socket请求及响应处理),为Catalina容器提供了统一的接口
Coyote将Socket输入转换封装为Request对象
Catalina将Request进一步封装为ServletRequest

注:在这里可以把Catalina狭义地理解为容器(Service中的Container)

@连接器组件
ProtocolHandler:Coyote协议接口(Endpoint+Processor)

Endpoint:Coyote通信端点(通信监听的接口、具体Socket接收和发送的处理器)=> 用来实现TCP/IP协议、是对传输层的抽象

Processor:Coyote协议处理接口 => 用来实现HTTP协议、是对应用层协议的抽象
Processor接收来自EndPoint的Socket,将字节流解析成Tomcat Request和Response对象,并通过Adapter将其提交到容器处理
 

 

@两种连接器

Tomcat在server.xml中配置了两种连接器
1)HTTP Connector监听8080端口,负责建立HTTP连接。通过浏览器访问Tomcat服务器的Web应用时使用。  
2)AJP Connector监听8009端口,负责和其它的HTTP服务器建立连接。在把Tomcat与其它HTTP服务器集成时使用。

说明:
Tomcat最主要的功能是提供Servlet/JSP容器;Tomcat对静态资源(如HTML文件或图像文件)的处理速度,以及提供的Web服务器管理功能不如其它专业的HTTP服务器(如IIS和Apache)=>
在实际应用中,常常把Tomcat的与其他HTTP服务器集成,对于不支持的Servlet/JSP的HTTP服务器,可以通过的Tomcat服务器来运行的Servlet/JSP组件。
 

Catalina

Catalina是Servlet容器实现,它通过松耦合的方式集成Coyote,同时它还包括启动入口、shell程序等
Catalina是Tomcat核心,Tomcat启动的时候会初始化一个Catalina的实例

@Tomcat模块分层结构

@Catalina结构

Catalina 负责解析Tomcat配置文件->创建Server组件,管理Server
Server 表示整个服务器(Catalina Servlet及其它组件),负责组装并启动Servlet引擎、Tomcat连接器,通过实现LifeCycle接口提供启动和关闭整个系统的方式
Server下面有多个服务Service
Service Server内部组件,每个Service将若干个连接器组件Connector(Coyote实现)绑定到一个容器组件Container(Engine)上
Connector 连接器处理与客户端的通信,负责接收客户请求,然后转给相关的容器处理,最后返回响应结果给客户
Container 容器负责处理用户的servlet请求




 

 

 

@Container结构

Engine 表示整个Catalina的Servlet引擎,用来管理多个虚拟主机,一个Service最多只有一个Engine,一个Engine可包含多个Host
Host 表示一个虚拟主机,一个虚拟主机可包含多个Context
Context 表示一个Web应用程序,一个Web应用可包含多个Wrapper
Wrapper 表示一个Servlet,Wrapper作为容器中的最底层,不能包含子容器

 

 

 

Jasper

@静态页面和动态页面
静态页面的网页代码都在页面中,不能自主管理发布更新的页面。
常见的静态页面扩展名:.html、.htm

动态页面是通过执行asp,php,jsp,.net等程序生成客户端网页代码的网页。可以通过网站后台管理系统对网站的内容进行更新。
常见的静态页面扩展名:.asp .php .jsp .cgi

注意:静态页面和动态页面的区别是网站与客户端有无互动,而不是有无动画

@Jasper
对基于JSP的Web应用,可以直接在JSP页面编写Java代码
可以把jsp看作是一种运行在服务端的脚本,最终输出到客户端的都是标准的HTML页面,并不包含任何Java代码
Jasper模块是Tomcat的JSP核心引擎
JSP本质是一个Servlet

@服务器如何将JSP页面转换为HTML页面?
Tomcat使用Jasper对JSP语法进行解析,生成Servlet并生成Class字节码,用户访问jsp时会访问Servlet,最终访问的结果直接响应在浏览器
在运行的时候Jasper会检测JSP文件是否修改,如果修改,则会重新编译JSP文件

 

参考资料:
java进阶教程Tomcat核心原理解析  https://www.bilibili.com/video/BV1dJ411N7Um
Tomcat(一):简介 https://blog.csdn.net/u014231646/article/details/79482195
Tomcat HTTP协议与AJP协议  https://blog.csdn.net/jeikerxiao/article/details/82745516
Apache与Tomcat有什么关系和区别  https://www.cnblogs.com/zangdalei/p/8057325.html
Tomcat外传 https://zhuanlan.zhihu.com/p/54121733
浅谈JSP  https://zhuanlan.zhihu.com/p/42343690

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章