練習 - 建立簡單的 Tomcat Java Web 應用程式

已完成

Web 應用程式通常用於處理真實世界的工作,例如庫存管理、在線表單和客戶面向入口網站。 在本課程模組中,您將瞭解如何使用熱門的開放原始碼伺服器 Apache Tomcat 來建立及部署 Java Web 應用程式。

假設您是一位開發人員,正在建置動態 Web 應用程式,讓使用者可以輸入資料並即時與您的平台互動。 您的用戶端希望此應用程式可在本機進行測試,並在雲端上輕鬆存取。 此設定可讓您先在本機計算機上進行測試,然後部署至即時環境作為無縫轉換。 從頭開始建置此設定可讓您彈性進行未來的更新和設定。

在本課程模組中,您會探索使用 Tomcat 建置及部署 Java Web 應用程式的基本步驟。 您有兩個選項:複製現有的專案存放庫以進行立即部署,或使用 Maven 從頭開始建置新的專案。 本課程模組涵蓋設定 Maven 專案、設定 Tomcat、在本機部署應用程式,以及使用 Maven 之類的工具來管理相依性和套件。

在本課程模組結束時,您將能夠在 Tomcat 上建立及部署 Java 型 Web 應用程式,並準備在本機和雲端裝載環境中支援 Web 應用程式部署。

建立 Java Tomcat Web 應用程式

在此練習中,您將建立一個簡單的 Java Web 應用程式,接受輸入並在畫面上顯示結果。 然後使用 Tomcat 在電腦上本機部署 Web 應用程式。 您有下列兩個選項:

  • 選項 1:複製範例存放庫,並立即部署您的 Web 應用程式。
  • 選項 2:從頭開始建立 Maven Tomcat 專案。

選項 1:複製範例存放庫,並立即部署 Web 應用程式

若要複製存放庫,請使用下列步驟:

  1. 使用下列命令複製範例專案存放庫:

    git clone https://github.com/MicrosoftDocs/simple-tomcat-maven-app.git
    
    
  2. 使用下列命令瀏覽至複製的專案存放庫:

    cd simple-tomcat-app
    

使用下列步驟設定本機 Tomcat 伺服器,以便可以在本機部署至 Tomcat:

警告

將使用者名稱和密碼直接儲存在組態檔中 ,例如tomcat-users.xml 和 Maven 的純文本 settings.xml 並不被視為安全,我們通常不建議這種做法,尤其是生產環境。 不過,其他替代方案不在此訓練課程模組的範圍內。 請勿使用您的真實使用者名稱和密碼!

  1. 編輯 Tomcat 組態檔 conf/tomcat-users.xml ,使其看起來像下列範例:

    <tomcat-users>
        <user username="your-tomcat-username" password="your-tomcat-password" roles="manager-script"/>
    </tomcat-users>
    
  2. 使用下列範例,將認證新增至 Maven ~/.m2/settings.xml 檔案,其中您將 取代 your-tomcat-username 為用戶名稱,並使用 your-tomcat-password 密碼:

    <servers>
        <server>
            <id>TomcatServer</id>
            <username>your-tomcat-username</username>
            <password>your-tomcat-password</password>
        </server>
    </servers>
    
  3. 使用下列命令來封裝及部署 Web 應用程式:

    mvn clean package cargo:deploy
    

部署之後,您可以在 http://localhost:8080/simple-tomcat-app 存取您的應用程式。

選項 2:從頭開始建立 Maven Tomcat 專案

若要從頭開始建立 Maven Tomcat 專案,您可以從建立 Maven 專案開始執行多個程式,最後就是將 Web 應用程式部署至 Tomcat。

建立 Maven 專案

若要為 Java Web 應用程式建立 Maven 專案,請使用下列命令:

mvn archetype:generate \
    -DgroupId=com.example \
    -DartifactId=simple-tomcat-app \
    -DarchetypeArtifactId=maven-archetype-webapp \
    -DinteractiveMode=false

下列輸出是典型的:

[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Value: /home/XXXXXXXX/LearnProjects/simple-tomcat-maven-app
[INFO] Parameter: package, Value: com.microsoft.azure.samples
[INFO] Parameter: groupId, Value: com.microsoft.azure.samples
[INFO] Parameter: artifactId, Value: azure-javaweb-app-simple
[INFO] Parameter: packageName, Value: com.microsoft.azure.samples
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: /private/tmp/TMP/azure-javaweb-app
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.657 s
[INFO] Finished at: 2024-10-18T12:39:41-07:00
[INFO] ------------------------------------------------------------------------

您現在在名為 simple-tomcat-app 的資料夾中有新的 Maven Web 專案。 現可使用下列檔案及目錄:

└── simple-tomcat-app
    ├── pom.xml
    └── src
        ├── main
        │   ├── java
        │   ├── resources
        │   └── webapp
        │       ├── index.jsp
        │       └── WEB-INF
        │           └── web.xml
        └── test
            ├── java
            └── resources

修改 Maven pom.xml 檔案

使用下列步驟修改 pom.xml 檔案:

  1. 開啟 pom.xml ,並使用下列範例將 Java 版本設定為 21:

    <java.version>21</java.version>
    <maven.compiler.source>21</maven.compiler.source>
    <maven.compiler.target>21</maven.compiler.target>
    
  2. 使用下列範例新增 Tomcat 和 Azure 部署外掛程式:

    <!-- Tomcat 10 Maven Plugin -->
    <plugin>
      <groupId>org.codehaus.cargo</groupId>
      <artifactId>cargo-maven3-plugin</artifactId>
      <version>1.9.9</version>
      <configuration>
        <!-- Container Configuration -->
        <container>
          <containerId>tomcat10x</containerId>
          <type>remote</type>
        </container>
        <!-- Configuration for Remote Deployment -->
        <configuration>
          <type>runtime</type>
          <properties>
            <cargo.remote.uri>http://localhost:8080/manager/text</cargo.remote.uri>
            <cargo.remote.username>cargo</cargo.remote.username>
            <cargo.remote.password>your-cargo-password</cargo.remote.password>
          </properties>
        </configuration>
        <!-- Deployable Artifact Configuration -->
        <deployables>
          <deployable>
            <groupId>${project.groupId}</groupId>
            <artifactId>${project.artifactId}</artifactId>
            <type>war</type>
            <properties>
              <context>${project.artifactId}</context>
            </properties>
          </deployable>
        </deployables>
      </configuration>
    </plugin>
    

以下是 pom.xml 檔案的完整內容:

<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.example</groupId>
  <artifactId>simple-tomcat-app</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>
  <name>simple-tomcat-app</name>
  <properties>
    <java.version>21</java.version>
    <maven.compiler.source>21</maven.compiler.source>
    <maven.compiler.target>21</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <dependencies>
    <dependency>
      <groupId>jakarta.servlet</groupId>
      <artifactId>jakarta.servlet-api</artifactId>
      <version>6.0.0</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>
  <build>
    <finalName>simple-tomcat-app</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.10.1</version>
        <configuration>
          <source>${java.version}</source>
          <target>${java.version}</target>
        </configuration>
      </plugin>
      <!-- Tomcat 10 Maven Plugin -->
      <plugin>
        <groupId>org.codehaus.cargo</groupId>
        <artifactId>cargo-maven3-plugin</artifactId>
        <version>1.9.9</version>
        <configuration>
          <!-- Container Configuration -->
          <container>
            <containerId>tomcat10x</containerId>
            <type>remote</type>
          </container>
          <!-- Configuration for Remote Deployment -->
          <configuration>
            <type>runtime</type>
            <properties>
              <cargo.remote.uri>http://localhost:8080/manager/text</cargo.remote.uri>
              <cargo.remote.username>cargo</cargo.remote.username>
              <cargo.remote.password>your-cargo-password</cargo.remote.password>
            </properties>
          </configuration>
          <!-- Deployable Artifact Configuration -->
          <deployables>
            <deployable>
              <groupId>${project.groupId}</groupId>
              <artifactId>${project.artifactId}</artifactId>
              <type>war</type>
              <properties>
                <context>${project.artifactId}</context>
              </properties>
            </deployable>
          </deployables>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

建立 Web 介面

若要新增網頁,請使用下列範例編輯 src/main/webapp/index.jsp 檔案:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Simple Tomcat App</title>
</head>
<body>
    <h1>Welcome to the Simple Tomcat App</h1>
    <form action="hello" method="get">
        <label for="name">Enter your name:</label>
        <input type="text" id="name" name="name">
        <button type="submit">Submit</button>
    </form>
</body>
</html>

建立 Serlet

servlet 是 Java 程式設計類別,用來藉由處理要求和產生動態內容來擴充伺服器的功能。 Servlet 會在 Web 容器內的伺服器端執行 ,例如 Apache Tomcat ,主要用於處理 Web 應用程式中的 HTTP 要求。 例如,當用戶端 - 例如網頁瀏覽器 - 將要求傳送至網頁伺服器時,servlet 會處理要求。 servlet 會執行任何必要的商業規則,例如,存取資料庫或呼叫其他服務,然後產生回應 ,通常是以 HTML 的形式傳送回用戶端。 Servlet 可讓開發人員使用 Java 建立動態、與平台無關的 Web 應用程式。

若要建立 servlet,請使用下列步驟:

  1. 使用下列命令更新檔案結構以新增 servlet:

    mkdir -p src/main/java/com/example && touch src/main/java/com/example/HelloServlet.java
    
  2. 使用下列程式代碼範例更新 HelloSeverlet.java 檔案的內容:

    package com.example;
    
    import jakarta.servlet.ServletException;
    import jakarta.servlet.annotation.WebServlet;
    import jakarta.servlet.http.HttpServlet;
    import jakarta.servlet.http.HttpServletRequest;
    import jakarta.servlet.http.HttpServletResponse;
    
    import java.io.IOException;
    
    @WebServlet("/hello")
    public class HelloServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String name = request.getParameter("name");
            response.setContentType("text/html");
            response.getWriter().write("<h1>Hello, " + name + "!</h1>");
        }
    }
    

您的新檔案結構看起來像這樣:

└── simple-tomcat-app
    ├── pom.xml
    └── src
        ├── main
        │   ├── java
        │   │   └── com
        │   │       └── example
        │   │           └── HelloServlet.java
        │   ├── resources
        │   └── webapp
        │       ├── index.jsp
        │       └── WEB-INF
        │           └── web.xml
        └── test
            ├── java
            └── resources

在本機部署至 Tomcat

使用下列步驟來設定本機 Tomcat 伺服器,以便進行部署:

警告

將使用者名稱和密碼以純文字格式直接儲存在像是 tomcat-users.xml 和 Maven 的 settings.xml 這樣的組態檔中是不安全的,通常不被建議使用,尤其是在生產環境中。 不過,其他替代方案不在此訓練課程模組的範圍內。 請勿使用您的真實使用者名稱和密碼!

  1. 使用下列範例編輯 Tomcat 組態檔 conf/tomcat-users.xml

    <tomcat-users>
        <user username="your-tomcat-username" password="your-tomcat-password" roles="manager-script"/>
    </tomcat-users>
    
  2. 使用下列範例,將認證新增至 Maven 的 ~/.m2/settings.xml 檔案,並以使用者名稱和your-tomcat-username密碼取代 your-tomcat-password

    <servers>
        <server>
            <id>TomcatServer</id>
            <username>your-tomcat-username</username>
            <password>your-tomcat-password</password>
        </server>
    </servers>
    

將 Web 應用程式部署至 Tomcat

使用下列命令來封裝及部署 Web 應用程式:

mvn clean package cargo:deploy

部署之後,您的應用程式可以在 http://localhost:8080/simple-tomcat-app 取得。