重定向 Web 应用程序目录

什么是 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 应用程序不一致。

配置 server.xml

由于我们需要启动两个 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 目录。

启动 Tomcat

分别执行 demo1/start.bat 和 demo2/start.bat 脚本。

访问 Tomcat

demo1 Tomcat 实例效果图:

demo2 Tomcat 实例效果图:

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号