什么是 Web 应用程序目录?在 Tomcat 默认配置中,webapps 就是 Web 应用程序目录,而 logs、work、conf、temp 目录是 Web 应用程序辅助目录,用来存放 web 容器的配置、日志和工作信息目录。
视安装及使用 Tomcat 的方式的不同,你可能不希望把 Web 应用程序的文件放入到 Tomcat 发行版本的目录中(即 Tomcat 主目录中,存在 bin、lib 目录)。有可能,你想定期更新/升级 Tomcat,或者想在本机启动多个 Tomcat 实例(当然,启动多个实例也可以安装多个全新的 Tomcat)。
示例:不知道读者是否使用 IDEA 编辑器启动过 Tomcat。如果使用过,则访问 C:UsersAdministrator.IntelliJIdea2018.3system omcat 目录(注意:Administrator 是的账户名),该目录下面存放的就是 IDEA 配置的 Tomcat。其中一个 Tomcat 的配置如下:
上图中,三个目录是否很熟悉,没错他们就是 Tomcat 下的 conf、logs、work 目录。这样就可以将 Web 应用程序的配置信息、程序文件与 Tomcat 二进制文件(bin、lib目录)分离开。更新 Tomcat 时,Web 应用程序配置文件和程序文件不会被覆盖;同时,实现多个 Tomcat 实例就变得简单了。
假如我们安装了一个名为“apache-tomcat-7.0.64”的 Tomcat,现在需要在该 Tomcat 下面启动两个 Tomcat 实例。两个 Tomcat 实例的配置文件和 Web 应用程序文件均放在 apache-tomcat-instance 目录下面,分别运行在 8080 和 8088 端口上面。如下图:
apache-tomcat-7.0.64 目录内容:
注意:为了验证 Tomcat 的除 bin 和 lib 目录外,其他目录均为 Web 应用目录,特将他们移动到 bak 目录备份。
apache-tomcat-instance 目录内容:
上面图中,demo1 和 demo2 目录分别代表一个 Tomcat 实例,他们分别存放了 Web 应用程序配置和程序文件,demo1 实例目录内容如下图:
其中,conf 目录存放 Web 应用程序配置信息;logs 目录存放 Web 应用程序日志信息;webapps 目录存放 Web 应用程序的程序文件;work 目录存放 Web 应用程序工作中的临时文件;start.bat 文件用来启动 Tomcat 实例的脚本。
注意:demo1 和 demo2 目录下面的文件基本一致,但配置文件和 Web 应用程序不一致。
由于我们需要启动两个 Tomcat 实例,因此需要在 server.xml 中分别为 demo1 和 demo2 Tomcat 实例配置端口,端口必须不一致,否则启动会抛出端口冲突错误。配置如下:
(1)demo1 的配置
<?xml version='1.0' encoding='utf-8'?> <Server port="8005" shutdown="SHUTDOWN"> ... <Service name="Catalina"> ... <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> ... </Service> </Server>
(2)demo2 的配置
<?xml version='1.0' encoding='utf-8'?> <Server port="8006" shutdown="SHUTDOWN"> ... <Service name="Catalina"> ... <Connector port="8088" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> ... </Service> </Server>
注意:主要修改 <Server> 和 <Connector> 元素上面的 port 属性,必须保证 demo1 和 demo2 端口不一致。
为了启动 Tomcat 方便,我们可以为每一个 Tomcat 实例编写一个简单的启动脚本。如下:
(1)demo1 的 start.bat
@echo off echo start demo1... set CATALINA_BASE=D:apache-tomcat-instancedemo1 set CATALINA_HOME=D:apache-tomcat-7.0.64 call %CATALINA_HOME%/bin/startup.bat
(2)demo2 的 start.bat
@echo off echo start demo2... set CATALINA_BASE=D:apache-tomcat-instancedemo2 set CATALINA_HOME=D:apache-tomcat-7.0.64 call %CATALINA_HOME%/bin/startup.bat
上面脚本中,主要设置 CATALINA_BASE 和 CATALINA_HOME 环境变量。其中:
CATALINA_BASE 指向每个 Tomcat 实例的私有目录的位置,就是 conf、logs、temp、webapps 和 work 的父目录。上面在 demo1 和 demo2 分别将它指向不同的目录;
CATALINA_HOME 指向 Tomcat 各个实例的公用信息的位置,就是 bin 和 lib 目录的父目录;
为了启动 Tomcat 实例后,区分 demo1 和 demo2 实例。我们可以分别进入 webapps/ROOT 目录,修改 index.jsp 文件。修改内容如下:
(1)demo1/webapps/ROOT/index.jsp
... <div id="asf-box"> <h1>Demo1 ${pageContext.servletContext.serverInfo}</h1> </div> ...
(2)demo2/webapps/ROOT/index.jsp
... <div id="asf-box"> <h1>Demo2 ${pageContext.servletContext.serverInfo}</h1> </div> ...
注意:ROOT 目录来自 Tomcat 安装包中 webapps/ROOT 目录。
分别执行 demo1/start.bat 和 demo2/start.bat 脚本。
demo1 Tomcat 实例效果图:
demo2 Tomcat 实例效果图: