天天看点

tomcat启动main函数(三)

有了上面的准备工作,我们开始源代码调试。

main函数说明

开打Bootstrap.java,找到main函数,函数源代码如下:

public static void main(String args[]) {



    try {

        // Attempt to load JMX class

        new ObjectName("test:foo=bar");

    } catch (Throwable t) {

        System.out.println(JMX_ERROR_MESSAGE);

        try {

            // Give users some time to read the message before exiting

            Thread.sleep(5000);

        } catch (Exception ex) {

        }

        return;

    }



    if (daemon == null) {

        daemon = new Bootstrap();

        try {

            daemon.init();

        } catch (Throwable t) {

            t.printStackTrace();

            return;

        }

    }



    try {

        String command = "start";

        if (args.length > 0) {

            command = args[args.length - 1];

        }



        if (command.equals("startd")) {

            args[0] = "start";

            daemon.load(args);

            daemon.start();

        } else if (command.equals("stopd")) {

            args[0] = "stop";

            daemon.stop();

        } else if (command.equals("start")) {

            daemon.setAwait(true);

            daemon.load(args);

            daemon.start();

        } else if (command.equals("stop")) {

            daemon.stopServer(args);

        }

    } catch (Throwable t) {

        t.printStackTrace();

    }

}
           

上面的代码一共分成三部分: 第一部分:

try {

    // Attempt to load JMX class

    new ObjectName("test:foo=bar");

} catch (Throwable t) {

    System.out.println(JMX_ERROR_MESSAGE);

    try {

        // Give users some time to read the message before exiting

        Thread.sleep(5000);

    } catch (Exception ex) {

    }

    return;

}
           

验证jdk基础类是否载入,没有载入,在标准输入打印错误信息,然后退出程序运行。

第二部分:

if (daemon == null) {

    daemon = new Bootstrap();

    try {

        daemon.init();

    } catch (Throwable t) {

        t.printStackTrace();

        return;

    }

}
           

初始化运行环境,载入需要的jar包,读取conf/server.xml,生成相应的运行对象:

第三部分:

try {

    String command = "start";

    if (args.length > 0) {

        command = args[args.length - 1];

    }



    if (command.equals("startd")) {

        args[0] = "start";

        daemon.load(args);

        daemon.start();

    } else if (command.equals("stopd")) {

        args[0] = "stop";

        daemon.stop();

    } else if (command.equals("start")) {

        daemon.setAwait(true);

        daemon.load(args);

        daemon.start();

    } else if (command.equals("stop")) {

        daemon.stopServer(args);

    }

} catch (Throwable t) {

    t.printStackTrace();

}
           

装载,开始运行。