tomcat源码笔记——概述,Bootstrap

tomcat是现在部署java网络工程用的最多的web容器,它帮我们实现了网络请求的监听,各个服务线程的启动,帮助我们管理项目中的各个server脚本。

本文从Bootstrap类中的main函数开始一步步解析tomcat源码中的各个流程。我看的是tomcat-8.5.24的版本,如果有什么谬误的地方也欢迎讨论。

tomcat生命周期管理,pipeline的流动。四大容器类StandardEngine,StandardHost,StandardContext及StandardWrapper都有各自缺省的标准valve实现,可以参考如下文章http://gearever.iteye.com/blog/1536022

后台线程的定义是:在程序结束时,即使线程还在运行但不会阻止JVM退出。一个后台线程的例子就是JVM的垃圾回收线程。将线程设置为后台线程只需要调用thread.setDaemon(true);参考: http://www.importnew.com/6255.html



bootstrap类,如它的字面意思是一个引导类,引导加载类文件,启动tomcat web容器

我们知道java工程,找到main函数就好像找到了线头一样,那么tomcat的线头就在bootstrap类里面main函数如下

main函数

可以看出这个函数主要做了几件事情:

bootstrap初始化

将bootstarp设置入daemon

读取最后一个入参指令

       startd:加载参数,启动容器

       stopd:调用catalina的stop方法的关闭并销毁容器

       start:设置等待状态为true(这个后续会挂起等待后续命令),加载参数,启动容器

        stop:调用catalina的stopServer方法关闭容器 该方法会先判断是否存在一个server实例,存在就调用实例stop掉,不存在会创建并执行解析器,然后再次获取server向server发送SHUTDWON的指令(这一块不是非常理解,欢迎探讨)

bootstrap初始化


初始化bootstrap

主要做了几件事情

初始化类加载器

设置catalinaLoader进主线程的ContextClassLoader(用于加载webApp下的类)

SecurityManager加载jar包的类

加载启动类org.apache.catalina.startup.Catalina

通过反射获取Catalina的接口里的setParentClassLoader,并且执行放入sharedLoader

将catalinaDaemon设为Catalina


其中初始化类加载器主要做了两件事情:

1、从CatalinaProperties获取jar包路径

2、依据Catalina目录jar包路径,分别依次解析commonLoader,catalinaLoader,sharedLoader


©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容