天天看點

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();

}
           

裝載,開始運作。