Tomcat源码分析

Tomcat源码分析

` 最近深入了解了下tomcat的源码,在此记录下


前言

tomcat之前只是简单应用下,里面的组件都没有真正了解过,只是简单从server.xml中更改下端口,仅此而已。。。感觉跟个黑盒子,这次总算是开了黑盒子一角。。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Tomcat整体架构是什么?

1)分析配置文件server.xml,

根据这个文件结构可以看出来如下几层关系
在这里插入图片描述
大致解释下:
server:tomcat实例
service:服务,主要为了组装connect和container的
connector:连接器
engine:引擎(容器)
host:虚拟主机(容器)
context:servlet项目实例(容器)
wrapper:具体服务内的servlet服务

2)网上盗个图,继续分析:

在这里插入图片描述
在配置文件中servie可以配置多个,但是一般只配置一个,毕竟微服务化,功能单一职责;
service主要的任务是为了将连接器与容器进行绑定的;
主要的要出场了:
connector:连接器,主要负责处理客户端连接通信
container:容器,主要分为4部分,层层递进

二、连接器的内部结构

1.连接器图

在这里插入图片描述
连接器实现类是CoyoteAdapter
EndPoint:通讯端点,底层是Socket,是对传输层的抽象
Processor:接收Endpoint的socket,转换成tomcat的Request和Response,默认实现是Http11Processor类
ProtocolHandler:通过Endpoint 和 Processor,将IO通信协议转换成符合Coyote协议接口,支持HTTP/1.1,AJP,HTTP/2,默认的是NIO,实现类是Http11NioProtocol
Adapter:将tomcat的Request和Reponse转换成为符合ServletRequest,以便后续实现,默认实现类是CoyoteAdapter

三、容器分析

在这里插入图片描述
Engine:Servlet引擎,用来管理多个虚拟节点,具体实现是StandarEngine
Host:代表一个虚拟节点,相当于多个虚拟主机地址,默认实现StandarHost
Context:表示一个web应该程序,默认实现StandarContext
Wrapper:表示servlet,默认实现StandarWrapper
在这里插入图片描述

四、Tomcat启动流程

1、tomcat启动各个组件都是实现了 Lifecycle接口,具备了各个生命周期的方法:

1)、init():初始化组件
2 )、start():启动组件
3 )、stop():停止组件
4 )、destroy():销毁组件

在这里插入图片描述

2、启动流程介绍

tomcat的启动类是BootStrap里的调用main函数入口,驱动调用Catalina类,先进行各个组件的init(初始化),再调用start(启动),这两种都是逐层进行的,也就是先父容器,再子容器
在这里插入图片描述
五、tomcat如何请求处理请求
分为连接器层和container两处,连接器是将请求socket处理成http(或者AJP)协议,通过适配器封装成HttpServlet,进入到容器中;容器是一也是一层层进入,每一层都维持一个pipeline,也就是责任链,里面放的都是Valve(阀门),各个层的最后一个Valve是配置好的,比如Host层叫StandarValue,Engine层叫StandardEngineValve等等,一层层处理,然后再把数据一层层返回。
盗个图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值