idea tomcat 源码运行

导入 idea
ant ide-intellij -Dproxy.use=true -Dproxy.host=127.0.0.1 -Dproxy.port=10808
会下载点依赖在 % userprofile%\tomcat-build-libs
catalina.home 和 catalina.base
catalina.home 是 Tomcat 安装目录,包含 bin 和 lib
catalina.base 是 web 项目部署 (工作) 目录,包含 conf、logs、webapps 等,如没指定则和 catalina.home 相同
org.apache.catalina.startup.Bootstrap
Bootstrap 类的作用:作为入口,通过反射调用 Catalina 的 setAwait、load、start
关键代码逻辑:
创建 ClassLoader(如 CommonClassLoader),加载 catalina.jar 等内部 JAR
使用 Thread.currentThread ().setContextClassLoader () 设置该加载器
通过反射调用 org.apache.catalina.startup.Catalina.start (),确保 Catalina 类由 CommonClassLoader 加载,而非系统类加载器
三个自定义类加载器,commonLoader、catalinaLoader、sharedLoader
加载类的路径不同,每种类加载都有自己的职责范围,配置默认在 conf/catalina.properties
Thread.currentThread().setContextClassLoader(daemon.catalinaLoader);
破坏双亲委派的一贯做法
setAwait
调用 Server 的 await () 开启线程,监听默认 8005 端口 SHUTDOWN 指令后,调用 Server 的 stop 和 destroy,停止并销毁 Server 下的所有子容器和组件
代码
getCanonicalFile 可以根据操作系统,解析得到规范的唯一路径名,如.././ 等,getCanonicalFile 可以正确解析,而 getAbsoluteFile 不会
深入
server.xml 解析,Server 一键初始化,一键启停涉及到 Tomcat 的生命周期管理
Subscribe to my newsletter
Read articles from peter zhang directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
