チュートリアル: 最初の Jakarta EE アプリケーション
このチュートリアルでは、IntelliJ IDEA でシンプルな Jakarta Enterprise Edition (EE) Web アプリケーションを作成する方法について説明します。 アプリケーションには、 Hello, World! を表示する単一の JSP ページと、同じく Hello, World! を表示する Java サーブレットへのリンクが含まれます。
Web アプリケーションテンプレートを使用して新しい Jakarta EE プロジェクトを作成し、アプリケーションサーバーの場所を IntelliJ IDEA に伝え、実行構成を使用してアーティファクトをビルドし、サーバーを起動して、アーティファクトをサーバーにデプロイします。
必要なものは次のとおりです。
関連するプラグイン | デフォルトでは、IntelliJ IDEA Ultimate には次の必要なプラグインがバンドルされ、有効になっています。 何かが機能しない場合は、次のプラグインが有効になっていることを確認してください。
プラグインをインストールする の説明に従って、 GlassFish プラグインをインストールして有効にします。 |
Java SE Development Kit (JDK) バージョン 1.8 以降 | Java 開発キット (JDK) に従って、IntelliJ IDEA から直接 JDK を取得するか、手動でダウンロードしてインストールできます(例: Oracle JDK または OpenJDK)。 |
Tomcat | Tomcat(英語) アプリケーションサーバーバージョン 7 以降。 |
GlassFish | GlassFish(英語) アプリケーションサーバーバージョン 4.0 以降。 公式リポジトリ(英語)から最新リリースを入手できます。 このチュートリアルの目的には、 Web プロファイルサブセットで十分です。 |
Web ブラウザー | Web アプリケーションを表示するには、Web ブラウザーが必要です。 |
新しい Jakarta EE プロジェクトを作成する
IntelliJ IDEA には、さまざまな Jakarta EE 実装に基づいて Jakarta Enterprise プロジェクトを作成するための専用ウィザードが含まれています。 このチュートリアルでは、簡単な Web アプリケーションを作成します。
メインメニューで へ移動します。
新規プロジェクト ダイアログで、 Jakarta EE を選択します。
プロジェクトの名前を入力します:
JakartaEEHelloWorldWeb アプリケーション テンプレートを選択し、 Maven をビルドツールとして選択し、プロジェクト SDK には Oracle OpenJDK 17 を使用してください。 後で行います。
次へ(N) をクリックして続行します。

バージョン(V) フィールドでは、このチュートリアルで使用する Tomcat 11 と互換性がある Jakarta EE 11 を選択します。
バージョン(V) フィールドで、 Jakarta EE 9.1 を選択します。このチュートリアルで使用されている GlassFish 6.2.5 と互換性があります。
依存関係 リストでは、Web アプリケーションテンプレートに 仕様 の サーブレット フレームワークのみが含まれていることがわかります。


作成 をクリックします。
デフォルトのプロジェクト構造を調べる
IntelliJ IDEA は、正常にビルドおよびデプロイできる定型コードを使用してプロジェクトを作成します。
pom.xml は、プロジェクトのビルドに必要な依存関係やプラグインなど、Maven 構成情報を備えた プロジェクトオブジェクトモデルです。
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>JakartaEEHelloWorld</artifactId> <version>1.0-SNAPSHOT</version> <name>JakartaEEHelloWorld</name> <packaging>war</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.target>21</maven.compiler.target> <maven.compiler.source>21</maven.compiler.source> <junit.version>5.11.0-M2</junit.version> </properties> <dependencies> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.4.0</version> </plugin> </plugins> </build> </project><?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>JakartaEEHelloWorld</artifactId> <version>1.0-SNAPSHOT</version> <name>JakartaEEHelloWorld</name> <packaging>war</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.target>11</maven.compiler.target> <maven.compiler.source>11</maven.compiler.source> <junit.version>5.9.2</junit.version> </properties> <dependencies> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>5.0.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.2</version> </plugin> </plugins> </build> </project>index.jsp は、ルートディレクトリの URL にアクセスしたときに開くアプリケーションの開始ページです。
Hello World!と/hello-servletへのリンクをレンダリングします。<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <!DOCTYPE html> <html> <head> <title>JSP - Hello World</title> </head> <body> <h1><%= "Hello World!" %> </h1> <p/> <a href="hello-servlet">Hello Servlet</a> </body> </html>HelloServletクラスはHttpServletを継承し、@WebServletでアノテートされています。/hello-servletへのリクエストを処理します。GET リクエストでは、Hello World!をレンダリングする HTML コードを返します。package com.example.demo; import java.io.*; import javax.servlet.http.*; import javax.servlet.annotation.*; @WebServlet(value = "/hello-servlet") public class HelloServlet extends HttpServlet { private String message; public void init() { message = "Hello World!"; } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html"); // Hello PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<h1>" + message + "</h1>"); out.println("</body></html>"); } public void destroy() { } }
プロジェクト ツールウィンドウを使用してプロジェクト内のファイルを参照して開くか、 Ctrl+Shift+N を押してファイルの名前を入力します。
アプリケーションサーバーを構成する
IntelliJ IDEA に、 GlassFish Tomcat アプリケーションサーバーが配置されている場所を知らせます。
Ctrl+Alt+S を押して設定を開き、 を選択します。
をクリックし、 GlassFish サーバーTomcat を選択します。
GlassFish Tomcat サーバーのインストール場所へのパスを指定します。 IntelliJ IDEA は、名前とバージョンを適切に検出して設定します。


実行構成の作成
IntelliJ IDEA は、アーティファクトを構築してアプリケーションサーバーにデプロイするための実行構成を必要とします。
メインメニューで、 に移動します。
実行/デバッグ構成 ダイアログで、
をクリックし、 GlassFish サーバーTomcat サーバー ノードを展開して、 ローカル を選択します。
実行構成設定ダイアログの下部に表示される警告を修正します。

ほとんどの場合、以下を修正する必要があります。
サーバー タブで、 サーバードメイン を
domain1に設定します。デプロイ タブで、デプロイするアーティファクトを追加します:
JakartaEEHelloWorld:war exploded
サーバー タブで、ルートリソースを指すように URL を設定します。
http://localhost:8080/JakartaEEHelloWorld_war_exploded/http://localhost:8080/JakartaEEHelloWorld-1.0-SNAPSHOT/

OK(O) をクリックして、実行構成を保存します。
構成を実行するには、 Alt+Shift+F10 を押して、作成したアプリケーションサーバー構成を選択します。
あるいは、上部のメインツールバーで実行構成を選択している場合は、メインツールバーの
をクリックするか、 Shift+F10 を押して実行できます。
この実行構成は、アーティファクトを作成してから、 GlassFish Tomcat サーバーを起動し、アーティファクトをサーバーにデプロイします。 サービス ツールウィンドウに対応する出力が表示されます。


これが完了すると、IntelliJ IDEA は指定された URL を Web ブラウザーで開きます。

そうでない場合は、自分で URL を開いてみてください: http://localhost:8080/JakartaEEHelloWorld_war_exploded/ http://localhost:8080/JavaEEHelloWorld-1.0-SNAPSHOT/
アプリケーションを変更する
アプリケーションのソースコードを変更するたびに、実行構成を再起動して変更を確認できます。 ただし、特にサーバーを再起動できない場合は、これは必ずしも必要ではありません。 ほとんどの変更はマイナーであり、アーティファクトの再構築、サーバーの再起動などは必要ありません。 アプリケーションの JSP ページを変更してみましょう。
index.jsp を開き、グリーティングを
Hello WorldからA better greetingに変更します。サービス ツールウィンドウで、
をクリックするか、 Ctrl+F10 を押します。
JSP ページは静的リソースであるため、 Update(U) ダイアログで リソースの更新(U) を選択します。 OK をクリックします。
Web ブラウザーでアプリケーションの URL をリフレッシュして、新しい文字列を確認します:
A better greeting.
実行構成 設定で、既定のアップデート アクションを設定できます。メインメニューの に移動してください。 GlassFishTomcat 実行構成 設定の サーバー タブで '更新' アクション時(U) オプションを変更してください。


フレーム切り替え時(F) オプションを使用すると、IntelliJ IDEA からフォーカスを変更するたびにサーバーを再デプロイして再起動することなく、リソースとクラスをリフレッシュするように構成できます。 この場合、 アプリケーションを更新 アクションを使用する必要はなく、Web ブラウザーに切り替えてページをリフレッシュするだけです。
アプリケーションを WAR にパッケージ化し、実行中のサーバーにデプロイする
前の手順では、すべてのファイルが圧縮されていないデプロイされたアーティファクトを使用してアプリケーションをデプロイしました。 これは、再デプロイせずに個々のリソースとクラスを更新できるため、開発の最初の段階で役立ちます。 アプリケーションに満足し、リモートサーバーにデプロイして他のユーザーと共有する準備ができたら、圧縮 Web アーカイブ (WAR) 形式を使用することをお勧めします。
リモートグラスフィッシュリモートトムキャット 実行構成を追加して、WAR アーティファクトを実行中のサーバーにデプロイしましょう。 これは、前の手順で実行中のサーバーを終了していないことを前提としています。
メインメニューで へ移動します。
実行/デバッグ構成 ダイアログで、
をクリックし、 GlassFish サーバーTomcat ノードを展開して、 リモート を選択します。
区別できるように、この実行構成の名前を変更します (例:
Remote GlassFish 6.2.5Remote Tomcat 10.1.5)。デプロイ タブを開き、デプロイするアーティファクトのテーブルの上にある
をクリックして、 アーティファクト を選択します。
JakartaEEHelloWorld:warアーティファクトを選択し、 OK をクリックします。

OK をクリックして、リモート実行構成を保存します。
index.jsp を開き、グリーティングを
Hello from WAR!に変更します。メインツールバーで新しい実行構成を選択し、
をクリックするか、 Shift+F10 を押します。


新しい構成では、WAR アーティファクトが構築され、実行中のサーバーにデプロイされます。 URL をリフレッシュして、新しい挨拶を確認してください: Hello from WAR!
トラブルシューティング
Jakarta EE との互換性
404 エラーが発生した場合は、 プロジェクトの作成時に GlassFish のバージョンと互換性のある Jakarta EE 仕様バージョンを選択したことを確認してください。
詳細については、 GlassFish のバージョンの互換性(英語)を参照してください。
Tomcat に接続できません
リモート Tomcat サーバーにアプリケーションをデプロイしようとしたときに Unable to connect to the localhost:1099 のようなエラーメッセージが表示された場合は、次の手順を試してください。
Tomcat サーバーが実行されていることを確認してください。 例: 上記で説明したローカル Tomcat 実行構成を起動します。
JMX 認証を構成するか、(運用環境ではない場合) アプリケーションをデプロイするサーバーを実行する前に
-Dcom.sun.management.jmxremote.authenticate=falseVM オプションを渡して JMX 認証を無効にします。
古い IntelliJ IDEA
IntelliJ IDEA バージョン 2020.2.2 以前を使用している場合、 新規プロジェクト ウィザードは Tomcat に必要なすべての依存関係を追加しません。 この場合、 pom.xml を開き、次の依存関係を追加します。
例: バージョン 2020.2.3 では、生成された pom.xml は次のようになります。
次の作業
このチュートリアルでは、シンプルな Jakarta EE アプリケーションを作成してデプロイしました。 この知識を拡張するには、 チュートリアル: 初めての RESTful Web サービス に従って RESTful Web サービスを作成します。