練習 - 建立簡單的 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 應用程式
若要複製存放庫,請使用下列步驟:
使用下列命令複製範例專案存放庫:
git clone https://github.com/MicrosoftDocs/simple-tomcat-maven-app.git使用下列命令瀏覽至複製的專案存放庫:
cd simple-tomcat-app
使用下列步驟設定本機 Tomcat 伺服器,以便可以在本機部署至 Tomcat:
警告
將使用者名稱和密碼直接儲存在組態檔中 ,例如tomcat-users.xml 和 Maven 的純文本 settings.xml 並不被視為安全,我們通常不建議這種做法,尤其是生產環境。 不過,其他替代方案不在此訓練課程模組的範圍內。 請勿使用您的真實使用者名稱和密碼!
編輯 Tomcat 組態檔 conf/tomcat-users.xml ,使其看起來像下列範例:
<tomcat-users> <user username="your-tomcat-username" password="your-tomcat-password" roles="manager-script"/> </tomcat-users>使用下列範例,將認證新增至 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 應用程式:
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 檔案:
開啟 pom.xml ,並使用下列範例將 Java 版本設定為 21:
<java.version>21</java.version> <maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target>使用下列範例新增 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,請使用下列步驟:
使用下列命令更新檔案結構以新增 servlet:
mkdir -p src/main/java/com/example && touch src/main/java/com/example/HelloServlet.java使用下列程式代碼範例更新 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 這樣的組態檔中是不安全的,通常不被建議使用,尤其是在生產環境中。 不過,其他替代方案不在此訓練課程模組的範圍內。 請勿使用您的真實使用者名稱和密碼!
使用下列範例編輯 Tomcat 組態檔 conf/tomcat-users.xml :
<tomcat-users> <user username="your-tomcat-username" password="your-tomcat-password" roles="manager-script"/> </tomcat-users>使用下列範例,將認證新增至 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 取得。