idea tomcat 源码运行

peter zhangpeter zhang
1 min read

导入 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

  • 关键代码逻辑:

  1. 创建 ClassLoader(如 CommonClassLoader),加载 catalina.jar 等内部 JAR

  2. 使用 Thread.currentThread ().setContextClassLoader () 设置该加载器

  3. 通过反射调用 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 的生命周期管理

0
Subscribe to my newsletter

Read articles from peter zhang directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

peter zhang
peter zhang