美文网首页tomcat源码笔记我爱编程
tomcat源码笔记——概述,Bootstrap

tomcat源码笔记——概述,Bootstrap

作者: 舒凡devp | 来源:发表于2018-01-12 12:27 被阅读95次

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


相关文章

网友评论

    本文标题:tomcat源码笔记——概述,Bootstrap

    本文链接:https://www.haomeiwen.com/subject/azoxoxtx.html