tomcat的生命周期分初始化(init),开始(start),停止(stop),销毁(destroy),抽象为LifecycleBase。
初始化过程:Bootstrap中main方法可见到boostrap.init()
这里做了几件事:把catalina的根路径设置为电脑当前登陆用户下的路径,初始化类加载器catalinaLoader供以后加载java类用,把当前线程的类加载器指向catalinaLoader,接着用catalinaLoader开始加载一些需要的类,然后用catalinaLoader加载Catalina类,利用反射把catalina的父类加载器指向最高层的类加载器java.lang.ClassLoader
然后执行Bootstrap中mian()的daemon.load(args),就是执行catalina中的load()方法,在此方法中主要做两件事,用Digester()加载启动生命周期中的所需的容器Server →Service→Container,Connector等
接着再用此digester加载tomcat安装包下config包的server.xml,把这些类都放到catalinaLoader中,然后把catalinaLoader中Server的catalina引用指向此catalina,也就是server 的类加载器指向catalinaLoader;接着开始初始化server
值得一提的是,当检测到本地没有serve.xmlr配置的时候,tomcat默认会去读嵌入式tomcat(Embed Tomcat)中server.xml配置,就是springboot中藏的那个tomcat。