创建 Java Web 应用

已完成

贵公司当前在内部服务器上运行多个 Java Web 应用。 为了降低与维护这些服务器相关的高成本,公司希望将 Web 应用迁移到 Azure 应用服务。

开发团队有使用 Maven 创建桌面应用的经验,并且你已使用 Maven 自动执行 Java 项目的生成过程。 你了解 Maven 使用插件进行项目添加额外功能,并且想要使用原型创建可部署到 Azure 应用服务的 Web 应用。

在本单元中,你将重新审视 Maven 和原型如何帮助创建 Java Web 应用。 你将了解如何创建小型 Java Web 应用并将其在本地运行。 然后,你将了解要添加到项目对象模型 (POM) 文件的内容,以便为新应用启用本地测试。

使用 Maven 自动生成 Java Web 应用

Maven 是最常用的 Java 生成工具,可用于生成和管理任何基于 Java 的项目。 它有助于简化开发人员如何以标准方式生成 Java 项目、明确定义项目包含的内容、发布项目信息的简单方法以及跨多个项目共享 JAR 的方法。 Maven 的目标是:

  • 简化生成过程。
  • 以透明方式迁移到新功能。
  • 提供统一的生成系统。
  • 实施有关开发最佳做法的指南。

什么是原型?

Maven 的创建者需要一种方法,以便在开发人员构建新项目时提供一致的最佳做法,并且他们发现不同类型的项目之间存在几种相似之处。 创建者使用此信息将这些项目类型定义为称为 原型的模板,Maven 使用该模板快速为新项目创建基架。 下面是常见原型的几个示例:

原型 DESCRIPTION
maven-archetype-archetype 生成原型项目
maven-archetype-mojo 生成示例 Maven 插件
maven-archetype-plugin 生成 Maven 插件
maven-archetype-plugin-site 生成 Maven 插件站点
maven-archetype-quickstart 生成一个 Maven 项目
maven-archetype-simple 生成简单的 Maven 项目
maven-archetype-site 生成一个 Maven 网站,该站点演示了一些受支持的文档类型,如 APT、XDoc 和 FML
maven-archetype-site-simple 生成简单的 Maven 站点
maven-archetype-webapp 生成 Maven Web 应用项目

在下一个练习中,你将创建可以部署到 Azure 的 Web 应用。 例如,若要使用 Maven 创建新的 Java Web 应用,请使用以下语法:

mvn archetype:generate \
  -DgroupId=com.microsoft.example \
  -DartifactId=MyWebApp \
  -DarchetypeArtifactId=maven-archetype-webapp \
  -DarchetypeVersion=1.4 \
  -DinteractiveMode=false

运行上述命令会创建包含以下内容的项目目录结构:

项目文件夹和文件层次结构的屏幕截图。

什么是项目对象模型(POM)文件?

Maven 项目的核心组件之一是项目对象模型 (POM) 文件,该文件是一 pom.xml 个名为位于项目的目录树中的 XML 文档。 POM 文件包含项目的属性、依赖项、生成阶段、插件和目标。 生成应用程序时,Maven 将负责管理依赖项。

Maven 是基于插件框架构建的,向 POM 文件添加插件是开发人员为其项目定义目标的方式。 运行 Maven 时,可以使用语法 mvn [plugin-name]:[goal-name]来执行特定目标,Maven 将运行所有目标,直到您指定的目标 [goal-name]

以下示例阐释了在本单元前一节中,使用maven-archetype-webapp原型的mvn archetype:generate命令生成的pom.xml文件内容。

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.microsoft.example</groupId>
  <artifactId>MyWebApp</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>MyWebApp Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <finalName>MyWebApp</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      ...
    </pluginManagement>
  </build>
</project>

如何将插件添加到 Maven 项目

若要将插件添加到 Maven 项目,需要将该插件的特定 XML 添加到 pom.xml 文件。 有两个有用的插件允许开发人员在其计算机上本地运行 Web 应用: Eclipse JettyApache Tomcat。 Azure 应用服务插件支持这两个 Web 服务器。 若要将其中一台服务器添加到项目中,需要将插件的必需 XML 添加到 <plugins> 标记中。

例如,若要添加 Tomcat 11 插件,需要添加 XML,如以下示例所示:

<plugin>
  <groupId>org.codehaus.cargo</groupId>
  <artifactId>cargo-maven3-plugin</artifactId>
  <version>1.10.13</version>
  <configuration>
    <container>
      <containerId>tomcat11x</containerId>
    </container>
  </configuration>
</plugin>

注释

若要查找插件及其相关信息,可在其中搜索中央存储库 https://search.maven.org/

为 Tomcat 插件添加 XML 后, <build> 元素应类似于以下示例:

  <build>
    <finalName>MyWebApp</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <plugin>
          <groupId>org.codehaus.cargo</groupId>
          <artifactId>cargo-maven3-plugin</artifactId>
          <version>1.10.13</version>
          <configuration>
            <container>
              <containerId>tomcat11x</containerId>
            </container>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

将 Tomcat 插件添加到项目后,可以使用以下 Maven 命令生成项目、启动 Tomcat 服务器并测试 Web 应用:

mvn package cargo:run

此命令生成应用,在默认端口 8080 上启动 Tomcat 服务器,并加载 Tomcat 服务器。 若要加载 Web 应用,请导航到 http://localhost:8080/MyWebApp (MyWebApp 是在 pom.xml元素中指定的<finalName>)。

加载 Web 应用时,它会显示项目 src\webapp 文件夹中的默认index.jsp页面。

在下一个练习中,你将使用 Maven 创建 Java Web 应用。