创建 Java Web 应用

已完成

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

你的开发团队具有使用 Maven 创建桌面应用的经验,而且你已使用 Maven 自动化 Java 项目的生成过程。 你知道 Maven 对项目使用插件来添加额外的功能,而且你想要使用原型来创建可部署到 Azure 应用服务的 Web 应用。

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

使用 Maven 自动生成 Java Web 应用

Maven 是最常用的 Java 生成工具,可使用它生成和管理任何基于 Java 的项目。 它提供了一个标准的方法来构建项目,对项目的组成部分进行了明确的定义,还提供了发布项目信息的简便方法以及跨多个项目共享 JAR 的方法,从而有助于简化开发人员构建 Java 项目的过程。 Maven 的目标是:

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

什么是原型?

Maven 的创建者需要一种方法来提供一致的最佳做法供开发人员在构造新项目时遵守,他们发现不同类型的项目之间存在诸多相似之处。 创建者使用此信息将这些项目类型定义为模板(称为“原型”),Maven 使用这些模板快速地为新项目创建基架。 下面是一些常见原型示例:

原型 描述
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]

以下示例演示了 mvn archetype:generate 命令使用本单元前述部分中的 maven-archetype-webapp 原型生成的 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 Jetty 和 Apache 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 应用。