1、tomcat启动加载简述
bin目录执行启动脚本,执行bin目录下的Bootstrap.jar中的org.apache.catalina.startup.Bootstrap类中的main方法,之后执行init方法,然后设置setCatalinaHome、setCatalinaBase、initClassLoaders,绑定tomcat自定义classloader到当前线程中。自定义classLoader加载lib目录中catalina.jar中的org.apache.catalina.startup.Catalina。
脚本传递start参数,执行Bootstrap.start方法,classLoader加载过的Catalina即变量catalinaDaemon,反射执行方法start即执行Catalina.start,方法中执行load方法,加载各种配置,然后执行initStreams方法,
System.setOut(new SystemLogHandler(System.out));
System.setErr(new SystemLogHandler(System.err));
SystemLogHandler在lib目录中的tomcat-coyote.jar文件中
System.out/err重定向到控制台以及catalina.out文件中
然后是执行Catalina.await()-->StandardServer.await()-->启动socket new ServerSocket 8005 等待脚本发送SHUTDOWN 指令,以停止server
server-->org.apache.catalina.core.StandardServer lib目录下的catalina.jar中
以上都是简述都不重要,其实系统输出重定向到控制台在脚本之中
linux-->catalina.sh
window-->就在窗口控制台
以下是 catalina.sh中脚本关键部分
搜索 linux 2>&1
window下你依旧在日志文件中看不到 system.out输出的内容,所以还是不建议system.out log debug message