Tomcat源码分析 · 贰 —— 启动过程剖析

云中志

共 1460字,需浏览 3分钟

 ·

2021-10-01 08:53

前言

今天我们来继续分析tomcat源码,昨天我们已经分析完了它的启动脚本和其中的init方法,我们现在知道init其实就是进行了ClassLoader的初始化操作,其中资源路径来源于catalina.properties文件,同时我们还知道最终初始化的ClassLoaderURLClassLoader

下面我们来看下Tomcat启动过程中的其他操作。

Tomcat

昨天关于init方法还没讲完,所以今天先要继续分析剩余内容。

init方法补充

关于init方法其实昨天基本上已经分析完了,因为昨天后半段都在分析initClassLooders方法,所以今天回过头再来补充下init后续的其他方法。

首先是setContextClasserLoader,这里的操作其实就是设置容器的类加载器,而这里的类加载器就是intiClassLoaders中生成的创建的类加载器。这个方法方法就是一个简单赋值操作就不展开讲了,需要注意的是这里获取并建议了java的安全策略管理器:

然后是加载类的操作securityClassLoad,这里也校验了安全策略管理器,下面截图已经详细展示了每一个操作具体加载的包,然后通过类的加载方法loadClass加载对应包下的类:

再接着,通过catalinaLoader类加载器,加载了org.apache.catalina.startup.Catalina,并创建它的实例,最后反射调用它的setParentClassLoader方法,设置父级类加载器为java.lang.ClassLoader,最终将实例化结果赋值给BootStrapcatalinaDaemon属性,至此init方法执行完成。

继续main方法

执行完bootstrap的初始化操作之后,会把bootstrap赋值给daemon,然后紧接着会解析command命令,分别执行它的setAwaitloadstart方法,这里调用方式都是反射,最终都调用的是catalinaDaemon实例对应的方法:

我们先看下setAwait方法,这里的catalinaDaemon就是前面我们实例化的org.apache.catalina.startup.Catalina,然后反射调用它的setAwait方法:

load方法调用也差不多:

start方法也是一样的:

好了,今天就先分享这么多,明天我们在深入剖析下catalina中对应方法的实现。

总结

从目前来看,Tomcat的启动过程确实笔记简单,短短几行代码就启动成功了,不过核心的功能应该还在后面,让我们拭目以待吧。

最后再探讨一个非技术问题,这两天看源码一直有个问题,为啥Tomcat中有很多变量都用到了catalina这个单词,是有什么特殊含义吗?百度之后,发现catalina直接翻译过来就是凯特琳娜,所以网上有两种说法,一种说法是开发者老婆的名字叫凯特琳娜,一种说法是美国西海岸有一个叫catalina的小岛,开发者比较喜欢那里,所以叫这个名字。我觉得第一种可能性还是蛮高的,毕竟Tomcat本身就是作者养的一只猫的名字,所以catalina是他老婆的名字也很顺理成章,而且这也算是程序员的浪漫吧!我的变量里面有你的影子……

- END -


浏览 21
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报