网站搜索

如何在一台 Apache Tomcat 服务器中运行多个 Web 应用程序


Apache Tomcat 是一个开源 Web 容器,允许您部署 Java ServletJSPWeb Sockets 来运行由 Java 代码支持的 Web 服务器。它还可以被识别为跨平台 servlet 容器或 Web 容器。

简而言之,由于与市场上其他 Web 容器相比,Tomcat 具有许多优势,因此在许多行业利益相关者中非常受欢迎。您可以从 Java 项目创建 Web 档案,并将其简单地部署在 tomcat 容器中以托管由 Java 编码的 HTTP Web 服务器。由于以下优点,各行业选择 apache tomcat 而不是其他容器。

  1. 轻的。
  2. 广泛使用。
  3. 比其他容器快得多。
  4. 易于配置。
  5. 非常灵活。

通常,apache tomcat 是一种用户友好的产品,它为工程师提供了通过最少的配置更改来部署其 WAR 工件(Web ARchives)的空间。

这篇文章的目标受众是已经使用 tomcat 并知道如何启动和使用 apache tomcat 引擎的读者。

在apache tomcat中,WARs应该放入容器默认部署的webapps目录中。简单来说,webapps目录充当tomcat的Java代码的主要容器,将其部署为Web服务器。

在我们需要从单个 tomcat 容器托管多个 Web 服务器的场景中,您可以使用这篇文章作为指导来完成它。我将通过本文向您展示如何在一个 tomcat 中部署多个 Web 应用程序或两个 Web 服务器。

先决条件:服务器中应安装Java。最好是 1.7.x 或更高版本。在本教程中,我安装了 Java 1.7,因为我使用的是 tomcat 版本 8.0.37。

您可以使用包管理器(例如 yumapt)安装 Java,如下所示:

yum install java              [On CentOS based Systems]
apt-get install default-jre   [On Debian based Systems]

第 1 步:安装 Apache Tomcat 服务器

1.首先使用root帐户创建一个单独的tomcat用户。

useradd tomcat
passwd tomcat

现在以 tomcat 用户身份登录并从官方网站下载最新的 apache tomcat 捆绑包:https://tomcat.apache.org/ 或者,您可以使用以下 wget 命令直接在终端中下载。

在本例中,我下载了 Apache Tomcat,8.5.5,它是目前发布的最新稳定版本之一。

wget http://redrockdigimark.com/apachemirror/tomcat/tomcat-8/v8.5.5/bin/apache-tomcat-8.5.5.tar.gz

2. 文件下载后,使用 tar 命令解压缩内容并查看目录结构,如下所示:

tar -xvf apache-tomcat-8.5.5.tar.gz
cd apache-tomcat-8.5.5/
ls -l
total 112
drwxr-x---. 2 tomcat tomcat  4096 Sep 29 11:26 bin
drwx------. 2 tomcat tomcat  4096 Sep  1 01:23 conf
drwxr-x---. 2 tomcat tomcat  4096 Sep 29 11:26 lib
-rw-r-----. 1 tomcat tomcat 57092 Sep  1 01:23 LICENSE
drwxr-x---. 2 tomcat tomcat  4096 Sep  1 01:21 logs
-rw-r-----. 1 tomcat tomcat  1723 Sep  1 01:23 NOTICE
-rw-r-----. 1 tomcat tomcat  7063 Sep  1 01:23 RELEASE-NOTES
-rw-r-----. 1 tomcat tomcat 15946 Sep  1 01:23 RUNNING.txt
drwxr-x---. 2 tomcat tomcat  4096 Sep 29 11:26 temp
drwxr-x---. 7 tomcat tomcat  4096 Sep  1 01:22 webapps
drwxr-x---. 2 tomcat tomcat  4096 Sep  1 01:21 work

步骤 2:配置 Apache Tomcat 服务器

3.我们正在寻找的配置更改位于conf目录中,用于放置所有帮助tomcat启动的配置文件。

conf 目录的内容如下所示。

cd conf/
ls -l
total 224
-rw-------. 1 tomcat tomcat  12502 Sep  1 01:23 catalina.policy
-rw-------. 1 tomcat tomcat   7203 Sep  1 01:23 catalina.properties
-rw-------. 1 tomcat tomcat   1338 Sep  1 01:23 context.xml
-rw-------. 1 tomcat tomcat   1149 Sep  1 01:23 jaspic-providers.xml
-rw-------. 1 tomcat tomcat   2358 Sep  1 01:23 jaspic-providers.xsd
-rw-------. 1 tomcat tomcat   3622 Sep  1 01:23 logging.properties
-rw-------. 1 tomcat tomcat   7283 Sep  1 01:23 server.xml
-rw-------. 1 tomcat tomcat   2164 Sep  1 01:23 tomcat-users.xml
-rw-------. 1 tomcat tomcat   2633 Sep  1 01:23 tomcat-users.xsd
-rw-------. 1 tomcat tomcat 168133 Sep  1 01:23 web.xml

4. 在这种情况下,对我来说重要的是 server.xml 文件。所以我不会对其他文件或目录做深入的解释。

server.xml 是配置文件,它告诉 tomcat 启动哪个端口、部署哪个目录内容以及更多主要和基本配置。

打开文件后,它基本上如下所示。

vim server.xml

步骤 3:在 Apache Tomcat 中部署 Web 应用程序

5.现在我们将在Apache tomcat中部署一个新的Web应用程序,首先找到服务标签关闭的地方并在第一次关闭后插入以下几行服务标签。

<Service name="webapps2">
    <Connector port="7070" maxHttpHeaderSize="7192"
        maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
        enableLookups="false" redirectPort="7443" acceptCount="100"
        connectionTimeout="20000" disableUploadTimeout="true" />
        <Connector port="7072" 
        enableLookups="false" redirectPort="7043" protocol="AJP/1.3" />

    <Engine name="webapps2" defaultHost="localhost">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
            resourceName="UserDatabase"/>
            <Host name="localhost" appBase="webapps2"
                unpackWARs="true" autoDeploy="true"
                 xmlValidation="false" xmlNamespaceAware="false">
            </Host>
    </Engine>
</Service>

如您所见,我已在新插入的条目中将连接器端口更改为 7070,因为默认 tomcat 以端口 8080 启动。完成设置后,将有两个 Web 服务器在端口 80807070 下运行。

6.保存对server.xml所做的更改后,在apache主目录中创建一个名为webapps2的目录。

cd /home/tomcat/apache-tomcat-8.5.5/
mkdir webapps2

如果您观察我提供的 server.xml 新条目,您应该会看到服务名称、应用程序库和引擎被命名为 webapps2。这就是我创建名为 webapps2 的目录的原因。您可以根据需要创建一个,但请确保根据需要对条目进行更改。

7. 为了确保第二个 Web 服务器启动并运行,我将 webapps 目录的内容复制到 webapps2 目录。

cp -r webapps/* webapps2/

8.现在是令人兴奋的部分。我们将启动服务器并查看它是否正常工作。进入bin目录并执行startup.sh脚本。您可以在日志目录中的 catalina.out 文件中查看日志。

cd bin/
./startup.sh
Using CATALINA_BASE:   /home/tomcat/apache-tomcat-8.5.5
Using CATALINA_HOME:   /home/tomcat/apache-tomcat-8.5.5
Using CATALINA_TMPDIR: /home/tomcat/apache-tomcat-8.5.5/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /home/tomcat/apache-tomcat-8.5.5/bin/bootstrap.jar:/home/tomcat/apache-tomcat-8.5.5/bin/tomcat-juli.jar
Tomcat started.

9. 如果您参考日志,您将能够看到 webappswebapps2 均已部署,并且应用程序已启动,没有任何问题。

cd logs/
tail -25f catalina.out 
29-Sep-2016 12:13:51.210 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/tomcat/apache-tomcat-8.5.5/webapps/examples
29-Sep-2016 12:13:51.661 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /home/tomcat/apache-tomcat-8.5.5/webapps/examples has finished in 452 ms
29-Sep-2016 12:13:51.664 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/tomcat/apache-tomcat-8.5.5/webapps/docs
29-Sep-2016 12:13:51.703 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /home/tomcat/apache-tomcat-8.5.5/webapps/docs has finished in 39 ms
29-Sep-2016 12:13:51.704 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/tomcat/apache-tomcat-8.5.5/webapps/host-manager
29-Sep-2016 12:13:51.744 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /home/tomcat/apache-tomcat-8.5.5/webapps/host-manager has finished in 39 ms
29-Sep-2016 12:13:51.748 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [http-nio-8080]
29-Sep-2016 12:13:51.767 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler [ajp-nio-8009]
29-Sep-2016 12:13:51.768 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service webapps2
29-Sep-2016 12:13:51.768 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.5
29-Sep-2016 12:13:51.777 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/manager
29-Sep-2016 12:13:51.879 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/manager has finished in 102 ms
29-Sep-2016 12:13:51.879 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/ROOT
29-Sep-2016 12:13:51.915 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/ROOT has finished in 35 ms
29-Sep-2016 12:13:51.927 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/examples
29-Sep-2016 12:13:52.323 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log ContextListener: contextInitialized()
29-Sep-2016 12:13:52.337 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log SessionListener: contextInitialized()
29-Sep-2016 12:13:52.341 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/examples has finished in 414 ms
29-Sep-2016 12:13:52.341 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/docs
29-Sep-2016 12:13:52.371 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/docs has finished in 29 ms
29-Sep-2016 12:13:52.371 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/host-manager
29-Sep-2016 12:13:52.417 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /home/tomcat/apache-tomcat-8.5.5/webapps2/host-manager has finished in 46 ms
...

10. 在这个场景中,我使用的服务器的 IP 是 172.16.1.39,您可以看到我可以在一个 tomcat 容器中启动两个 Web 服务器。

http://172.16.1.39:8080   [1st Web App]
http://172.16.1.39:7070   [2nd Web App]

希望大家觉得这篇文章有用且有趣。与 TecMint 保持联系,如有任何有关本文的疑问,请随时与我联系。