演習 - 単純な Tomcat Java Web アプリを作成する
Web アプリケーションは、在庫管理、オンライン フォーム、顧客向けポータルなどの実際のタスクを処理するために広く使用されています。 このモジュールでは、一般的なオープンソース サーバーである Apache Tomcat を使用して Java Web アプリケーションを作成してデプロイする方法について説明します。
あなたは、ユーザーがデータを入力してプラットフォームとリアルタイムで対話できる動的な Web アプリケーションを構築するためにプロジェクトに取り組んでいる開発者だとします。 クライアントは、このアプリをテスト用にローカルで使用できるようにし、クラウド上で簡単にアクセスできるようにしたいと考えています。 このセットアップでは、最初にローカル コンピューターでテストしてから、シームレスな移行としてライブ環境にデプロイできます。 このセットアップをゼロから構築すると、将来の更新と構成に柔軟に対応できます。
このモジュールでは、Tomcat を使用して Java Web アプリをビルドしてデプロイするための重要な手順について説明します。 2 つのオプションがあります。既存のプロジェクト リポジトリを複製してすぐにデプロイするか、Maven を使用して新しいプロジェクトを最初からビルドします。 このモジュールでは、Maven プロジェクトの設定、Tomcat の構成、ローカルでのアプリのデプロイ、Maven などのツールを使用した依存関係とパッケージの管理について説明します。
このモジュールを終了すると、Java ベースの Web アプリケーションを Tomcat に作成してデプロイできるようになります。これにより、ローカル環境とクラウドホスト環境の両方で Web アプリケーションのデプロイをサポートできるようになります。
Java Tomcat Web アプリを作成する
この演習では、入力を受け取り、結果を画面に表示する最小限の Java Web アプリケーションを作成します。 その後、Tomcat を使用して、コンピューターに Web アプリをローカルにデプロイします。 次の2つのオプションがあります。
- オプション 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 インターフェイスを作成する
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>
サーブレットを作成する
サーブレットは、要求を処理し、動的コンテンツを生成することによってサーバーの機能を拡張するために使用される Java プログラミング・クラスです。 サーブレットは、Apache Tomcat などの Web コンテナー内のサーバー側で実行され、主に Web アプリケーションで HTTP 要求を処理するために使用されます。 クライアント (Web ブラウザーなど) が Web サーバーに要求を送信すると、サーブレットは要求を処理します。 サーブレットは、データベースへのアクセスや他のサービスの呼び出しなど、必要なビジネス ロジックを実行し、多くの場合、HTML 形式で応答を生成してクライアントに送り返します。 サーブレットを使用すると、開発者は Java を使用して動的なプラットフォームに依存しない Web アプリケーションを作成できます。
サーブレットを作成するには、次の手順に従います。
次のコマンドを使用して、サーブレットを追加するようにファイル構造を更新します。
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
でアプリにアクセスできます。