Tomcat源码-换个角度看架构和核心流程

362 阅读2分钟

一、 换个角度看架构

1.Connector

  Connector连接器接收外界请求,然后转换为对应的ServletRequest对象。

image.png

涉及到的几个对象的作用:

image.png

  在有多线程处理的情况下,通过Executor线程池来处理:

image.png

官网的流程图:tomcat.apache.org/tomcat-8.5-…

image.png

2.Container

Container容器是在Connector处理完请求后获取到ServletRequest后内部处理请求的统一管理对象。

image.png

而需要把上面这个图的内容搞清楚,直接看代码的话还是比较头晕的,这时我们可以结合Tomcat的运行过程来分析

二、Tomcat核心流程

image.png

1.Bootstrap

  Bootstrap是Tomcat的入口类,相关的核心方法:

  • init():自定义类加载器和创建Catalina方法
  • load():会完成相关对象的初始化
  • start():启动各种对象的start()方法
  • ....

  initClassLoaders()完成了自定义类加载器。JVM中提供的类加载器是双亲委派模式,在Tomcat中自定义了加载方式。打破了双亲委派模型:先自己尝试去加载这个类,找不到再委托给父类加载器。通过复写findClass和loadClass实现。

2.Catalina

  完成server.xml文件的解析,完成Server组件并具体调用相关的组件的init和start方法

3.Lifecycle

  统一管理各个组件的生命周期,init,start,stop,destory方法,对应的实现是LifecycleBase实现了Lifecycle中的生命周期相关逻辑,用到了模板设计模式。

4.Server

  管理Service组件,并调用其init和start方法

5.Service

  管理Connector和Engine

6.Connector

7.Container

Container容器是在Connector处理完请求后获取到ServletRequest后内部处理请求的统一管理对象。

image.png

init方法

image.png

start方法

image.png

Container的处理过程

image.png

最后看看StandardHost是如何来实现Web项目部署的

image.png

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第21天,点击查看活动详情