一、 换个角度看架构
1.Connector
Connector连接器接收外界请求,然后转换为对应的ServletRequest对象。
涉及到的几个对象的作用:
在有多线程处理的情况下,通过Executor线程池来处理:
官网的流程图:tomcat.apache.org/tomcat-8.5-…
2.Container
Container容器是在Connector处理完请求后获取到ServletRequest后内部处理请求的统一管理对象。
而需要把上面这个图的内容搞清楚,直接看代码的话还是比较头晕的,这时我们可以结合Tomcat的运行过程来分析
二、Tomcat核心流程
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后内部处理请求的统一管理对象。
init方法
start方法
Container的处理过程
最后看看StandardHost是如何来实现Web项目部署的