解读tomcat源码之tomcat的启动过程

4 篇文章 0 订阅

解读tomcat源码之tomcat的启动过程

前言

tomcat 我们经常用到,但是有时候我们却感到对他无比陌生,出了错都不知道是什么原因引起的。这个就比较尴尬,不过好在tomcat是开源免费的,我们可以看到其源码,那么问题就简单了,我们看看源码什么迷惑就没有了。最近对于tomcat有诸多不解,故看看源码来解惑,理解可能有些偏差,还请大神不吝赐教,小子在此谢过。

启动过程

我们都应该知道tomcat是通过类org.apache.catalina.startup.Bootstrap 启动的。首先要说的是这个类是被final修饰的,使不能被继承的。这防止了我们通过继承这种方式搞一些破坏。在main函数里我们最先调用的是init() 函数在init() 里面tomcat做了一下几件事:
1. 初始化catalina homecatalina base catalina home:就是可以被多个tomcat公用的,如:lib和bin文件夹是所有tomcat公用的 catalina base:就是每个tomcat实例所拥有的备份,比如:conf 、logs、webapps、work文件夹下面的文件就是每个tomcat实例所独有的备份。
2. 初始化类加载器commonLoadercatalinaLoadersharedLoader。然后通过catalinaLoader 加载org.apache.catalina.startup.Catalina。在通过命令行传入参数(不传入默认就是start)。当传入参数是start 时,会在Bootstrapload()函数里面通过反射调用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.");
            }

未完待续

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值