CATALINA_BASE 与 CATALINA_HOME 的区别:
CATALINA_HOME 是 Tomcat 的安装目录,CATALINA_BASE 是 Tomcat 的工作目录。
如果我们想要运行多个 Tomcat 实例,但是不想安装多个 Tomcat 软件副本。那么我们可以配置多个工作目录,每个运行实例独占一个工作目录,但是共享同一个安装目录。
Tomcat 每个运行实例需要使用自己的conf、logs、temp、webapps、work目录,因此 CATALINA_BASE 就指向这些目录。
运行多个Tomcat实例:
D:\N3verL4nd\Desktop\Web>tree /f
卷 本地磁盘 的文件夹 PATH 列表
卷序列号为 00000200 0006:08B0
D:.
│ start.bat
│
├─conf
│ catalina.policy
│ catalina.properties
│ context.xml
│ logging.properties
│ server.xml
│ tomcat-users.xml
│ tomcat-users.xsd
│ web.xml
│
├─logs
├─temp
├─webapps
│ └─ROOT
│ index.jsp
│
└─work
修改 conf 文件夹下的 server.xml
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8105" shutdown="SHUTDOWN">
<!--
...
-->
<Service name="Catalina">
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8543" />
<Connector port="8109" protocol="AJP/1.3" redirectPort="8543" />
</Service>
<!--
...
-->
</Server>
当前目录下建立批处理文件,用以启动 Tomcat
set "CATALINA_BASE=%cd%"
set "CATALINA_HOME=D:\Java\Tomcat\apache-tomcat-8.0.50"
set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"
call "%EXECUTABLE%" start
IntelliJ 的实现与上述基本类似。
在 IntelliJ 启动 Tomcat,查看日志:
D:\Java\Tomcat\apache-tomcat-8.0.50\bin\catalina.bat run
[2018-04-12 12:36:08,879] Artifact Gradle : cn.bjut : ServletDemo-1.0-SNAPSHOT.war (exploded): Waiting for server connection to start artifact deployment...
Using CATALINA_BASE: "D:\Intellij\.IntelliJIdea\system\tomcat\Unnamed_ServletDemo_2"
Using CATALINA_HOME: "D:\Java\Tomcat\apache-tomcat-8.0.50"
Using CATALINA_TMPDIR: "D:\Java\Tomcat\apache-tomcat-8.0.50\temp"
Using JRE_HOME: "D:\Java\JDK\jdk1.8.0_151"
Using CLASSPATH: "D:\Java\Tomcat\apache-tomcat-8.0.50\bin\bootstrap.jar;D:\Java\Tomcat\apache-tomcat-8.0.50\bin\tomcat-juli.jar"
D:\Intellij\.IntelliJIdea\system\tomcat\Unnamed_ServletDemo_2
就是一个 Tomcat 实例。
并且D:\Intellij\.IntelliJIdea\system\tomcat\Unnamed_ServletDemo_2\conf\Catalina\localhost
目录下有一个WEB.XML
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/Web" docBase="D:\N3verL4nd\Desktop\ServletDemo\build\libs\exploded\ServletDemo-1.0-SNAPSHOT.war" />
以上的代码的意思是:http://localhost:8080/Web/
访问的是docBase
指定的 war 包。