知道IDE是什么控制Tomcat的,对更清晰地理解Java Web的执行过程有帮助。在此以IntelliJ IDEA为例,简要描述一下IDE集成管理Tomcat的基本原理。
首先是两个重要的环境变量:
-
CATALINA_HOME
:Tomcat的软件安装目录,从这个目录去获取Tomcat的相关程序执行Tomcat的启动、停止等操作 -
CATALINA_BASE
:Tomcat的工作文件(如配置文件、WebApp文件等)目录,默认使用CATALINA_HOME
的值
在IDEA中添加Tomcat环境时,实际上就是在设置CATALINA_HOME
的值(在启动Tomcat时使用),这样IDEA就知道了Tomcat安装在哪里了。
IDEA要启动Tomcat来运行当前的Java Web项目,就要设置Tomcat的配置,使得当前项目的编译结果(如<项目目录>/out/artifacts/xxx_Web_exploded/
)能够被Tomcat容器管理到。为了避免搞乱安装目录中的配置,IDEA不会直接修改Tomcat安装目录中的配置,而是将这些配置文件复制到一个临时目录(比如在Windows上是C:\Users\<username>\AppData\Local\JetBrains\IntelliJIdea<version>\tomcat\<guid>
),这个临时目录就是CATALINA_BASE
。
每次在IDEA中启动Tomcat时,IDEA都会做一次这样的复制,然后修改这个临时目录中的配置文件,比如:
- 端口号(
conf/server.xml
中设置<Connector>
的port
) - WebApp的部署路径(
conf/Catalina/localhost/ROOT.xml
中设置<Context>
的docBase
)
IDEA执行$CATALINA_HOME/bin/catalina.sh run
命令来启动Tomcat进程,启动时会设置CATALINA_HOME
和CATALINA_BASE
这两个环境变量。
Tomcat进程一直保持运行,直至IDEA执行$CATALINA_HOME/bin/catalina.sh stop
命令来结束之。