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函数如下

tomcat源码笔记——概述,Bootstrap_第1张图片
main函数

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

bootstrap初始化

将bootstarp设置入daemon

读取最后一个入参指令

       startd:加载参数,启动容器

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

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

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

bootstrap初始化


tomcat源码笔记——概述,Bootstrap_第2张图片
初始化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


你可能感兴趣的:(tomcat源码笔记——概述,Bootstrap)