image.png
【Tomcat源码篇-简单到超乎想象的启动流程】 如果生命周期的内容不清楚,请看上一篇文章的介绍 。
4.start方法 最后我们来看下start方法的代码 。
public void start() throws Exception {if (catalinaDaemon == null) {init(); // 如果 catalinaDaemon 为空 初始化操作}// 获取的是 Catalina 中的 start方法Method method = catalinaDaemon.getClass().getMethod("start", (Class [])null);// 执行 Catalina 的start方法method.invoke(catalinaDaemon, (Object [])null);}
上面的代码逻辑也很清楚,就是通过反射的方式调用了Catalina对象的start方法 。所以进入Catalina的start方法中查看 。
public void start() {if (getServer() == null) {load(); // 如果Server 为空 重新 init 相关的组件}if (getServer() == null) {log.fatal("Cannot start server. Server instance is not configured.");return;}// Start the new server关键方法--->启动Servertry {getServer().start();} catch (LifecycleException e) {// 省略...}// 省略...// Register shutdown hook注册关闭的钩子if (useShutdownHook) {// 省略...}if (await) {await();stop();}}
通过上面的代码我们可以发现核心的代码还是getServer.start()方法,也就是通过Server对象来嵌套的调用相关注解的start方法 。
文章插图
image.png
5.核心流程的总结我们可以通过下图来总结下Tomcat启动的核心流程
文章插图
image.png
从图中我们可以看到Bootstrap其实没有做什么核心的事情,主要还是Catalina来完成的 。
本文只是从Tomcat的启动核心流程来讲解,还有些具体的实现细节没有介绍到,会在后续的文章中给大家细细到来,欢迎关注收藏哦!
推荐阅读
- 学习HTML5这一篇就够了
- 餐饮业|餐饮行业至暗时刻,居然还有人不知死活往里面冲?是的!第5篇
- SpringBoot内置Tomcat启动原理源码分析
- 局域网共享怎么设置都访问不了?别着急:一篇文章讲清了
- 穿衣搭配|看完这篇,职场少走五年弯路!!!
- 常用SQL语句,看这篇就够了
- 如何写出自己第一篇10万+文章?
- 服务器安全篇:最可怕的搜索引擎 运维必备之——Shodan
- MyBatis源码解析
- 职业教育|如花似玉就活该被当众踢脸踹头?2022年的第一桩丑闻就这样翻篇吗