解读tomcat源码之tomcat的启动过程
来源:互联网 发布:lol职业选手训练软件 编辑:程序博客网 时间:2024/04/30 02:47
解读tomcat源码之tomcat的启动过程
前言
tomcat 我们经常用到,但是有时候我们却感到对他无比陌生,出了错都不知道是什么原因引起的。这个就比较尴尬,不过好在tomcat是开源免费的,我们可以看到其源码,那么问题就简单了,我们看看源码什么迷惑就没有了。最近对于tomcat有诸多不解,故看看源码来解惑,理解可能有些偏差,还请大神不吝赐教,小子在此谢过。
启动过程
我们都应该知道tomcat是通过类org.apache.catalina.startup.Bootstrap
启动的。首先要说的是这个类是被final修饰的,使不能被继承的。这防止了我们通过继承这种方式搞一些破坏。在main函数里我们最先调用的是init()
函数在init()
里面tomcat做了一下几件事:
1. 初始化catalina home
和catalina base
catalina home
:就是可以被多个tomcat公用的,如:lib和bin文件夹是所有tomcat公用的 catalina base
:就是每个tomcat实例所拥有的备份,比如:conf 、logs、webapps、work文件夹下面的文件就是每个tomcat实例所独有的备份。
2. 初始化类加载器commonLoader
、catalinaLoader
、sharedLoader
。然后通过catalinaLoader
加载org.apache.catalina.startup.Catalina
。在通过命令行传入参数(不传入默认就是start)。当传入参数是start
时,会在Bootstrap
的load()
函数里面通过反射调用Catalina
函数里面的load()
函数。然后调用catalina
里面的start()
然后tomcat就这样启动起来了,当然在load()
和start()
方法里面又调用了其他函数。(这个后来我慢慢补齐,还没怎么看懂,水平有限,惭愧惭愧)
String command = "start"; if (args.length > 0) { command = args[args.length - 1]; } if (command.equals("startd")) { args[args.length - 1] = "start"; daemon.load(args); daemon.start(); } else if (command.equals("stopd")) { args[args.length - 1] = "stop"; daemon.stop(); } else if (command.equals("start")) { daemon.setAwait(true); daemon.load(args); daemon.start(); } else if (command.equals("stop")) { daemon.stopServer(args); } else if (command.equals("configtest")) { daemon.load(args); if (null==daemon.getServer()) { System.exit(1); } System.exit(0); } else { log.warn("Bootstrap: command \"" + command + "\" does not exist."); }
未完待续
- 解读tomcat源码之tomcat的启动过程
- [Tomcat源码]Tomcat的启动过程
- Tomcat源码解读系列(二)——Tomcat的核心组成和启动过程
- Tomcat源码解读系列——Tomcat的核心组成和启动过程
- Tomcat源码解读系列(二)——Tomcat的核心组成和启动过程
- Tomcat源码阅读之Engine启动过程
- 解读tomcat之二:tomcat如何启动
- tomcat的启动过程(Tomcat源码解析(三))
- tomcat的启动过程(Tomcat源码解析(三))
- tomcat源码---启动过程分析
- Tomcat源码分析--启动过程
- Tomcat启动过程源码研究
- tomcat源码解读二 tomcat的生命周期
- Tomcat的启动过程
- Tomcat的启动过程
- tomcat的启动过程
- tomcat的启动过程
- Tomcat学习之启动过程
- (Java)LeetCode-30. Substring with Concatenation of All Words
- Karma和Jasmine自动化单元测试
- 安卓应用中判断手机是否连接网络或者是否连接wife或手机3/4G
- autolayout怎样在一个视图中平均分布若干个子视图–autolayout 基本用法
- php命名规范
- 解读tomcat源码之tomcat的启动过程
- 缓存 redis 详解
- UILabel换行与多行文字显示处理
- 前辈的佛经
- 欢迎使用CSDN-markdown编辑器
- initialize方法与load方法的区别
- [AngularJS面面观] 17. 依赖注入 --- 注解的定义与实现
- 分治算法
- AngularJs专用测试工具Protractor 搭建PhoneCat项目的开发与测试环境