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