war ファイルの構造

各 Web アプリケーションは、Web サーバーにアップロードされると、単一の .war ファイルにパッケージ化されます。WAR は、以前は Web アーカイブでしたが、現在は Web アプリケーション リソースの略です。実際、これはパッケージ化された Web アプリケーションを含む zip アーカイブです。

war ファイルの一般的な内容は次のとおりです。

/index.html
/guestbook.jsp
/images/logo.png
/js/jquery.js
/WEB-INF/web.xml
/WEB-INF/classes/com/codegym/Util.class
/WEB-INF/classes/com/codegym/MainServlet.class
/WEB-INF/classes/application.properties
/WEB-INF/lib/util.jar
/META-INF/MANIFEST.MF

war ファイル内には、.html、.css、.js ファイルなどの静的 Web リソースが含まれています。また、写真、ビデオ、その他一般的にはあらゆるファイルも含めることができます。これらはルートフォルダーまたはサブフォルダーに存在する可能性がありますが、それは問題ではありません。Tomcat は、要求された場合にそれらを提供するだけです。

Web アプリケーションが apple という名前で Web サーバーにロードされているとします。http://localhost/apple/images/logo.pngがリクエストされると、Tomcat はファイル/images/logo.pngを返します。

これとは別に、 WEB-INF フォルダーに注目してください。Java コードを格納するように設計されています。Tomcat はその内容を公開しません。

/WEB-INF/クラス/ アプリケーションを実行する前にローダーが必要とするサーブレット クラスやリソース ファイルなど、コンパイルされた非 JAR Java クラスのディレクトリ
/WEB-INF/lib/ jar ライブラリを保存する場所
/WEB-INF/web.xml デプロイメント記述子

war ファイル構造と Maven プロジェクト

次に、Maven プロジェクトのディレクトリ階層に移りましょう。カタログの完全なレイアウトは公式マニュアルでご覧いただけます。ここでは、テストリソースを除いて、多少短縮されたバージョンで説明します。したがって、標準の Maven ディレクトリ階層は次のようになります。

ソース/メイン/Java 一般に受け入れられているパッケージ階層に従ったアプリケーション クラスとライブラリのソース コード
src/メイン/リソース アプリケーションリソースファイル: データベース設定、ローカリゼーションファイルなど。
ソース/メイン/ウェブアプリ Web アプリケーション リソース (JSP ファイル、テキスト ファイル、スクリプトなど)

ご覧のとおり、これはあなたが知っている WAR ファイルの構造とは大きく異なります。しかし、Web アプリケーションをコンパイルするときに実際に行われるのは、Java EE 仕様で定義された構造にファイルを移動して連結するだけです。

src/main/webappディレクトリは、Web アプリケーションのコンテキスト ルートを定義し (サーバーにデプロイされる場合、コンテキスト ルートは WAR ファイルの名前と同じになります)、その中には WEB-INF ディレクトリがすでに含まれています。つまり、src/main/webappの内容がWeb アプリケーションに完全に転送されます。

すべての Java クラスはクラス ファイルにコンパイルされ、パッケージ構造を維持したまま/WEB-INF/classes/ディレクトリに移動されます。上で定義したように Maven pom.xml 依存関係で定義されている、組み込まれたライブラリの JAR は、/WEB-INF/lib/ディレクトリに移動されます。

アプリケーション リソースsrc/main/resources は、アプリケーションのクラスパス、具体的には同じ/WEB-INF/classes/ディレクトリに移動されます。

それを完全に明確にするために、プロジェクトを構築するときに何がどのようにどこに配置されるかを理解するのに役立つ次の図を見てください。

war ファイルデバイス