tomcat啓動流程
1.入口函數就是BootStrap--main方法
2.初始化並啓動
-----建立BootStrap對象,調用init方法完成初始化
setCatalinaHome();--設置home目錄:邏輯:若是設置了catalina.home屬性,就用這個,若是沒有就用user.dir(用戶根目錄)做爲home目錄,自動設置catalina.home
setCatalinaBase()---設置base目錄(也就是項目默認目錄):邏輯若是設置了catalina.base,就用這個,不然就用跟catalina.home相同的目錄
initClassLoaders()---初始化classload類加載器,tomcat有本身的類加載器StandardClassLoader,用來加載web項目
Thread.currentThread().setContextClassLoader(catalinaLoader)---將catalinaLoader類加載器設置到當前線程中去
startupClass.newInstance()--使用自定義的類加載器加載Catalina類,並經過反射建立對象
startupInstance.getClass().getMethod(methodName, paramTypes)---經過反射給Catalina對象設置父setParentClassLoader類加載器,值就是StandardClassLoader
catalinaDaemon = startupInstance----catalina守護進程賦予Catalina對象
-----根據傳入的參數 start stop啓動或中止服務
daemon.setAwait(true);---經過反射執行Catalina對象的setAwait方法,等待
daemon.load(args)---經過反射執行Catalina對象的load方法,參數就是start--stop
daemon.start()---經過反射執行Catalina對象的start方法web