如何将 WAR 文件部署到 Tomcat

1、概述

Apache Tomcat是 Java 社区中最流行的 Web 服务器之一。它作为一个servlet 容器提供,能够为带有 WAR 扩展的 Web 档案提供服务。

它提供了一个管理仪表板,我们可以从中部署新的 Web 应用程序,或取消部署现有的应用程序,而无需重新启动容器。这在生产环境中特别有用。

在本教程中,我们将快速概述 Tomcat,然后介绍部署 WAR 文件的各种方法。

进一步阅读:

Apache Tomcat 简介

安装和配置 Apache Tomcat 的简短实用指南。

将 Spring Boot WAR 部署到 Tomcat 服务器中

了解如何配置 Spring Boot 应用程序以部署在 Tomcat 服务器上。

将 Tomcat HTTP 端口更改为 80

了解如何配置 Apache Tomcat HTTP 服务器以在端口 80 上运行。

2.Tomcat结构

在开始之前,我们应该熟悉一些术语和环境变量。

2.1。环境变量

如果我们以前使用过 Tomcat,这些对我们来说会很熟悉。

这个变量指向我们服务器的安装目录:

$CATALINA_HOME

此变量指向 Tomcat 特定实例的目录(我们可能安装了多个实例):

$CATALINA_BASE

如果未明确设置此变量,则将为其分配与$CATALINA_HOME相同的值。

Web 应用程序部署在$CATALINA_HOME\webapps目录下。

2.2. 术语

文档根目录 –指 Web 应用程序的顶级目录,所有应用程序资源都位于该目录中,例如 JSP 文件、HTML 页面、Java 类和图像。

上下文路径 –指相对于服务器地址的位置,代表 Web 应用程序的名称。

例如,如果我们的 Web 应用程序放在$CATALINA_HOME\webapps\myapp目录下,它将通过 URL http://localhost/myapp访问,其上下文路径将是/myapp

WAR – Web 存档的缩写。它是以 ZIP 格式打包 Web 应用程序目录层次结构的文件的扩展。Java Web 应用程序通常打包为 WAR 文件以进行部署。可以在命令行上或使用 IDE(如 Eclipse)创建这些文件。

部署 WAR 文件后,Tomcat 将其解压缩并将webapps目录中的所有项目文件存储在以项目命名的新目录中。

3. Tomcat 设置

Tomcat Apache Web 服务器是免费软件,可以从他们的网站下载。要求用户的机器有可用的 JDK,并且JAVA_HOME环境变量设置正确。

3.1。启动Tomcat

我们可以通过简单地运行位于$CATALINA_HOME\bin\startup的启动脚本来启动 Tomcat 服务器。每个安装中都有一个.bat.sh

我们将根据我们使用的是基于 Windows 还是基于 Unix 的操作系统来选择适当的选项。

3.2. 配置角色

在部署阶段,我们会有一些选择,其中之一是使用 Tomcat 的管理仪表板。要访问此仪表板,我们必须为管理员用户配置适当的角色。

要访问仪表板,管理员用户需要manager-gui角色。稍后,我们需要使用 Maven 部署一个 WAR 文件,为此我们还需要manager-script角色。

让我们在$CATALINA_HOME\conf\tomcat-users中进行这些更改:

<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="admin" password="password" roles="manager-gui, manager-script"/>

有关不同 Tomcat 角色的更多详细信息,请访问此官方链接

3.3. 设置目录权限

最后,我们将确保对 Tomcat 安装目录有读/写权限。

3.4. 测试安装

为了测试 Tomcat 是否设置正确,我们将运行启动脚本(startup.bat / startup.sh)。如果控制台上没有显示错误,我们可以通过访问http://localhost:8080进行仔细检查。

如果我们看到 Tomcat 登陆页面,那么我们已经正确安装了服务器。

3.5. 解决端口冲突

默认情况下,Tomcat 设置为侦听端口8080上的连接。如果有另一个应用程序已经绑定到这个端口,启动控制台会通知我们。

要更改端口,我们可以编辑位于$CATALINA_HOME\conf\server.xml 的服务器配置文件 server.xml 默认情况下,连接器配置为:

<Connector port="8080" protocol="HTTP/1.1" 
  connectionTimeout="20000" redirectPort="8443" />

例如,如果我们想将端口更改为8081,那么我们必须更改连接器的端口属性:

<Connector port="8081" protocol="HTTP/1.1" 
  connectionTimeout="20000" redirectPort="8443" />

有时,我们选择的端口默认是不开放的。在这种情况下,我们需要在 Unix 内核中使用适当的命令打开端口,或者在 Windows 中创建适当的防火墙规则。由于超出了本文的范围,我们不会在此处详细介绍。

4. 从 Maven 部署

如果我们想使用 Maven 来部署我们的 web 档案,我们必须在 Maven 的settings.xml文件中将 Tomcat 配置为服务器。

有两个位置可以找到settings.xml文件:

  • Maven 安装:${maven.home}/conf/settings.xml
  • 一个用户的安装:${user.home}/.m2/settings.xml

找到它后,我们将添加 Tomcat:

<server>
    <id>TomcatServer</id>
    <username>admin</username>
    <password>password</password>
</server>

现在我们需要从 Maven 创建一个基本的 Web 应用程序来测试部署。让我们导航到我们想要创建应用程序的位置。

我们将在控制台上运行这个命令来创建一个新的 Java Web 应用程序:

mvn archetype:generate -DgroupId=com.baeldung -DartifactId=tomcat-war-deployment 
  -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

这将在目录tomcat-war-deployment中创建一个完整的 Web 应用程序,该应用程序将打印 hello world! 如果我们现在部署它并通过浏览器访问它。

但在我们这样做之前,我们需要进行一项更改以启用 Maven 部署。让我们转到pom.xml并添加这个插件:

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <url>http://localhost:8080/manager/text</url>
        <server>TomcatServer</server>
        <path>/myapp</path>
    </configuration>
</plugin>

请注意,我们使用的是 Tomcat 7 插件,因为它适用于版本 7 和 8,无需任何特殊更改。

配置url是我们将部署发送到的 url,Tomcat 将知道如何处理它。server元素是 Maven 识别的服务器实例的名称。最后,path元素定义了我们部署的上下文路径

这意味着如果我们的部署成功,我们将通过点击http://localhost:8080/myapp来访问 Web 应用程序。

现在我们可以从 Maven 运行以下命令。

要部署 Web 应用程序:

mvn tomcat7:deploy

然后取消部署:

mvn tomcat7:undeploy

最后,在进行更改后重新部署它:

mvn tomcat7:redeploy

5. 使用 Cargo 插件部署

Cargo是一个多功能库,它允许我们以标准方式操作各种类型的应用程序容器。

5.1。货物部署设置

在本节中,我们将学习如何使用 Cargo 的 Maven 插件将 WAR 部署到 Tomcat。在本例中,我们将其部署到版本 7 实例。

为了深入了解整个过程,我们将从头开始,从命令行创建一个新的 Java Web 应用程序:

mvn archetype:generate -DgroupId=com.baeldung -DartifactId=cargo-deploy 
  -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

这将在cargo-deploy目录中创建一个完整的 Java Web 应用程序。如果我们按原样构建、部署和加载此应用程序,它将打印Hello World!在浏览器中。

与 Tomcat7 Maven 插件不同,Cargo Maven 插件要求此文件存在。

由于我们的 Web 应用程序不包含任何 servlet,因此我们的web.xml文件将非常基本。我们将导航到新创建项目的WEB-INF文件夹,并创建一个包含以下内容的web.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
        id="WebApp_ID" version="3.0">

    <display-name>cargo-deploy</display-name>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

为了让 Maven 能够在不输入完全限定名称的情况下识别 Cargo 的命令,我们需要将 Cargo Maven 插件添加到 Maven 的settings.xml 中的插件组中。

作为根<settings></settings>元素的直接子元素,我们将添加:

<pluginGroups>
    <pluginGroup>org.codehaus.cargo</pluginGroup>
</pluginGroups>

5.2. 本地部署

在本小节中,我们将编辑pom.xml以适应我们的新部署要求。

我们将添加这个插件:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.cargo</groupId>
            <artifactId>cargo-maven2-plugin</artifactId>
            <version>1.5.0</version>
            <configuration>
                <container>
                    <containerId>tomcat7x</containerId>
                    <type>installed</type>
                    <home>Insert absolute path to tomcat 7 installation</home>
                </container>
                <configuration>
                    <type>existing</type>
                    <home>Insert absolute path to tomcat 7 installation</home>
                </configuration>
            </configuration>
       </plugin>
    </plugins>
</build>

在撰写本文时,最新版本是1.5.0。但是,始终可以在此处找到最新版本。

请注意,我们将打包明确定义为 WAR;没有这个,我们的构建将失败。在插件部分,我们将添加 cargo maven2 插件。此外,我们将添加一个配置部分,告诉 Maven 我们正在使用 Tomcat 容器以及现有安装。

通过将容器类型设置为installed,我们告诉 Maven 我们在机器上安装了一个实例,并且我们提供了此安装的绝对 URL。

通过将配置类型设置为existing,我们告诉 Tomcat 我们有一个正在使用的现有设置,不需要进一步的配置。

另一种方法是告诉 cargo 下载并设置通过提供 URL 指定的版本。但是,我们的重点是 WAR 部署。

值得注意的是,无论我们使用的是 Maven 2.x 还是 Maven 3.x,cargo maven2 插件都适用于两者。

我们现在可以通过执行以下命令来安装我们的应用程序:

mvn install

然后我们将部署它:

mvn cargo:deploy

如果一切顺利,我们应该能够通过加载http://localhost:8080/cargo-deploy 来运行我们的 Web 应用程序。

5.3. 远程部署

要进行远程部署,我们只需要更改pom.xml的配置部分。远程部署意味着我们没有本地安装 Tomcat,但可以访问远程服务器上的管理器仪表板。

让我们更改pom.xml,使配置部分如下所示:

<configuration>
    <container>
        <containerId>tomcat8x</containerId>
        <type>remote</type>
    </container>
    <configuration>
        <type>runtime</type>
        <properties>
            <cargo.remote.username>admin</cargo.remote.username>
            <cargo.remote.password>admin</cargo.remote.password>
            <cargo.tomcat.manager.url>http://localhost:8080/manager/text
              </cargo.tomcat.manager.url>
        </properties>
    </configuration>
</configuration>

这一次,我们将容器类型从已安装更改为远程,并将配置类型从现有更改为运行时。最后,我们将身份验证和远程 URL 属性添加到配置中。

我们将确保角色和用户已经存在于$CATALINA_HOME/conf/tomcat-users.xml 中,就像以前一样。

如果我们正在为远程部署编辑同一个项目,我们将首先取消部署现有的 WAR:

mvn cargo:undeploy

然后我们将清理项目:

mvn clean

接下来,我们将安装它:

mvn install

最后,我们将部署它:

mvn cargo:deploy

而已。

6. 从 Eclipse 部署

Eclipse 允许我们嵌入服务器,以便在正常工作流程中添加 Web 项目部署,而无需离开 IDE。

6.1。在 Eclipse 中嵌入 Tomcat

要将安装嵌入到 Eclipse 中,我们从任务栏中选择窗口菜单项,然后从下拉列表中选择首选项。

然后我们将在出现的窗口的左侧面板上看到首选项的树状网格。接下来,我们导航到eclipse -> servers,或者在搜索栏中输入servers

然后我们可以选择安装目录(如果尚未为我们打开),然后选择我们下载的 Tomcat 版本。

在面板的右侧,将出现一个配置页面。在这里,我们选择启用选项来激活此服务器版本并浏览到安装文件夹。

 

我们将应用更改,然后下次从 Eclipse 的窗口 -> 显示视图子菜单打开服务器视图时,新配置的服务器将出现,我们可以启动、停止和部署应用程序到它。

6.2. 在嵌入式 Tomcat 中部署 Web 应用程序

要将 Web 应用程序部署到 Tomcat,它必须存在于我们的工作区中。

让我们从窗口打开服务器视图 -> 显示视图 并查找服务器。打开后,我们只需右键单击我们配置的服务器,然后从出现的上下文菜单中选择添加部署。

 

 

在出现的New Deployment对话框中,我们将打开项目下拉菜单,然后选择 Web 项目。

Project组合框下方有一个Deploy Type部分。当我们选择Exploded Archive(development mode)时,我们在应用程序中的更改将实时同步,而无需重新部署。这是开发过程中的最佳选择,因为它非常有效。

 

 

选择打包存档(生产模式)将要求我们每次进行更改并在浏览器中查看它们时重新部署。这仅适用于生产,但 Eclipse 仍然使它同样容易。

6.3. 在外部位置部署 Web 应用程序

我们通常选择通过 Eclipse 部署 WAR 以使调试更容易。但是,有时我们可能希望将其部署到 Eclipse 嵌入式服务器使用的位置以外的位置。最常见的情况是当我们的生产服务器在线时,我们想要更新 Web 应用程序。

我们可以通过在生产模式下部署来绕过此过程,注意New Deployment对话框中的 Deploy Location,然后从那里选择WAR 

在部署期间,我们可以从嵌入式服务器列表旁边的服务器视图中选择<Externally Launched>选项,而不是选择嵌入式服务器。然后我们导航到外部 Tomcat 安装的webapps目录。

7. 从 IntelliJ IDEA 部署

要将 Web 应用程序部署到 Tomcat,它必须存在并且已经下载并安装。

7.1。本地配置

让我们打开“运行”菜单,然后单击“编辑配置”选项。

 

 

在左侧面板中,我们将搜索Tomcat Server。如果它不存在,我们将单击菜单中的 + 号,搜索Tomcat,然后选择Local。在名称字段中,我们将放置Tomcat 7/8(取决于我们的版本)。

 

 

然后我们将单击Configure...按钮,在Tomcat Home字段中,我们将导航到安装的主位置并选择它。

 

 

可选地,我们可以将启动页面设置为http://localhost:8080/HTTP 端口:8080;我们将酌情更改端口。

最后,我们将转到Deployment选项卡,单击 + 符号,选择我们要添加到服务器的工件,然后单击 OK。

 

 

 

7.2. 远程配置

我们将按照与本地 Tomcat 配置相同的说明进行操作,但在服务器选项卡中,我们必须输入安装的远程位置。

8. 通过复制存档部署

我们已经学习了如何从 Eclipse 中导出 WAR。我们可以做的另一件事是将其部署到任何 Tomcat 实例的$CATALINA_HOME\webapps目录中。如果实例正在运行,部署将在 Tomcat 解压缩存档并配置其上下文路径时立即启动。

如果实例未运行,则服务器将在下次启动时部署项目。

9. 从 Tomcat 管理器部署

假设我们手头已经有了 WAR 文件,并且想使用管理仪表板来部署它,我们可以通过访问http://localhost:8080/manager来访问管理器仪表板。

仪表板有五个不同的部分:管理器应用程序部署诊断服务器信息。

如果我们转到Deploy部分,我们会找到两个子部分。

9.1。部署位于服务器上的目录或 WAR 文件

如果 WAR 文件位于运行 Tomcat 实例的服务器上,那么我们可以填写所需的Context Path字段,前面加上正斜杠“/”。

例如,如果我们希望通过 URL http://localhost:8080/myapp从浏览器访问我们的 Web 应用程序,那么我们的上下文路径字段将包含/myapp。

我们还可以跳过XML 配置文件 URL字段并转到WAR目录 URL字段。在这里,我们将输入出现在我们服务器上的 Web 存档文件的绝对 URL。例如,如果我们的文件位置是C:/apps/myapp.war,那么我们输入这个位置。重要的是我们不要忘记 WAR 扩展。

之后,我们可以点击部署按钮。页面将重新加载,我们应该在页面顶部看到以下消息:

OK - Deployed application at context path /myapp

我们的应用程序也应该出现在页面的应用程序部分。

9.2. 要部署的 WAR 文件

在这里,我们只需单击选择文件按钮,导航到 WAR 文件的位置,选择它,然后单击部署按钮。

在这两种情况下,如果一切顺利,Tomcat 控制台都会通知我们部署成功,并显示以下消息:

INFO: Deployment of web application archive \path\to\deployed_war has finished in 4,833 ms

10. 结论

在本文中,我们重点介绍了如何将 WAR 部署到 Tomcat 服务器中。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值