WAR ファイル形式とは?
.war(Java Web Archive)は、標準の ZIP コンテナをベースにした、JARファイルに似たアーカイブ形式です。.war ファイルには、Apache Tomcat や Jetty などのサーブレットコンテナ上でデプロイ・実行可能な Java Webアプリケーションとサーバーサイドコンポーネントが含まれています。コンパイル済みの .class ファイルの他に、.jsp ページ、静的 HTML、CSS など、サーバー上で実行される追加リソースを格納できます。必須の WEB-INF/ ディレクトリには、デプロイ記述子である web.xml と、同梱される依存関係の .jar ファイル用の lib/ フォルダが含まれます。
.war ファイルの使用方法
.war ファイルは、他のアーカイブと同様に展開してソースコードやリソースを確認できます。拡張子を .zip に変更すれば、任意のアーカイブツールで開くことが可能です。ただし、実行環境においては、デプロイのためにアプリケーションが .war 形式である必要があります。サーブレットコンテナがクラスのロードとリクエストのルーティングを処理します。現代の Spring Boot プロジェクトでは、.war の代わりに自己完結型の fat-JAR を提供することが多いですが、WildFly や WebSphere などの Jakarta EE サーバーでは WAR デプロイが標準のままです。.war は、エンタープライズアプリケーション全体をまとめる .EAR アーカイブに対する、Webアプリケーション側の対応形式です。
セキュリティと安全性
リスク: MEDIUMWAR には実行可能なサーバーサイドコード(コンパイル済みサーブレットや同梱された JAR ライブラリ)が含まれているため、デプロイするとそのコードがサーバーの権限で実行されます。信頼できるソースからの WAR のみをデプロイしてください。悪意のある、または侵害された WAR は、Webシェルをホストしたり脆弱な依存関係を含んでいたりする可能性があります。内容の確認(.zip へのリネーム)は安全ですが、デプロイにはリスクが伴います。サーブレットコンテナと WAR に同梱されたライブラリを常に最新の状態に保ってください(サプライチェーンリスク、例:脆弱なロギングライブラリ)。
形式の詳細
概要- Konqueror Webアーカイブ - KDE の Konqueror は、Webページ(およびアセット)を .war アーカイブとして保存できました。これは稀なレガシー KDE 用途であり、主流の形式ではありません。
- WAR(オーディオ/サンプル)およびゲームデータ - 一部のレガシーなツールやゲームエンジンで、生のオーディオサンプルやゲームアセットアーカイブに .war が使用されていました。Java 形式とは無関係です。
WEB-INF/ フォルダ(web.xml、classes/、lib/ を含む)です。内容を確認するには .zip にリネームしてください。WAR 固有のマジックナンバーは存在しません。
WAR ファイルを開くプログラム
WEB-INF やライブラリを確認できます(ZIP形式のため)。デプロイするにはサーブレットコンテナを使用してください。 .war を Tomcat の webapps/ フォルダにコピー(または Manager アプリを使用)すると、Tomcat が展開して実行します。JDK/JRE が必要です。 .war を Tomcat の webapps/ フォルダにコピー(または Manager アプリを使用)すると、Tomcat が展開して実行します。JDK/JRE が必要です。 .war を Tomcat の webapps/ フォルダにコピー(または Manager アプリを使用)すると、Tomcat が展開して実行します。JDK/JRE が必要です。 技術的詳細
詳細仕様| コンテナ形式 | ZIP アーカイブ。オフセット 0 のマジックバイトは PK (0x50 0x4B 0x03 0x04) で、標準の ZIP と同一 |
| 圧縮方法 | エントリごとに DEFLATE(ZIP 標準)。個別のエントリは無圧縮の STORED の場合がある |
| MIME タイプ | application/java-archive |
| バイト順序 | リトルエンディアン(ZIP 仕様を継承) |
| 必須ディレクトリ構造 | デプロイ記述子 web.xml を含む WEB-INF/ フォルダ、classes/ および lib/ サブディレクトリを含む必要がある |
| エンコーディング | バイナリ |
| 一般的なファイルサイズ | 1 MB - 300 MB。同梱される依存関係 JAR や静的アセットの数により異なる |
| 整合性 / 署名 | エントリごとの CRC-32。META-INF/ 内の .SF / .RSA 署名ファイルによるオプションの JAR コード署名 |
| 最大アーカイブエントリ数 | 65,535(標準 ZIP)。ZIP64 拡張によりこの制限は解除される |
| デプロイ対象 | サーブレットコンテナおよび Jakarta EE アプリケーションサーバー:Apache Tomcat, Jetty, WildFly, GlassFish, WebSphere |
| バージョン宣言 | WEB-INF/web.xml の <web-app> 要素で指定される Servlet/Jakarta EE 仕様バージョン。オプションで META-INF/MANIFEST.MF |
| クラスの分離 | デプロイされた各 WAR には分離されたクラスローダーが割り当てられ、同時デプロイされたアプリ間でのライブラリバージョンの競合を防止する |
| Java EE パッケージングにおける階層 | WAR は Webアプリケーション層。JAR はライブラリ/アプリを保持。EAR (Enterprise Archive) は WAR と EJB JAR を一つのデプロイ単位にまとめる |
| プラットフォームのサポート | クロスプラットフォーム。JVM と互換性のあるサーブレットコンテナを備えた任意の OS(Windows, Linux, macOS)で動作 |
| ホットデプロイ | ほとんどのサーブレットコンテナは、サーバーを完全に再起動せずに WAR ファイルをデプロイまたは置換することをサポート(ドロップインデプロイ) |
| リリース日 | 1999 (Java Servlet 2.2 / J2EE 1.2) |
| 最新バージョン | Tracks Jakarta EE / Servlet spec (Jakarta Servlet 6.0, 2022); WAR layout itself is stable |
| オープンスタンダード | はい · ロイヤリティフリー |
| 仕様書 | jakarta.ee |
WAR の変換
コミュニティ Q&A
ユーザーからの質問まだ質問はありません。WAR ファイルについて最初の質問をしてみましょう。
よくある質問
WARファイルを開く、または実行するにはどうすればよいですか?
webapps/ フォルダに .war をコピーすることです。これにより Webアプリが自動展開され実行されます。JDK/JRE のインストールが必要です。WARファイルを解凍するだけでいいのですか?
.zip にリネームするか jar xf app.war を実行して WEB-INF やライブラリ、ページを確認できます。ただし、解凍しただけではアプリは実行されません。実行するにはサーバーへのデプロイが必要です。JAR、WAR、EARファイルの違いは何ですか?
WEB-INF 配下のサーブレット/JSP)をパッケージ化します。EAR は、複数の WAR や EJB JAR を統合できる完全なエンタープライズアプリをパッケージ化します。すべて ZIP ベースです。WARファイルをダブルクリックしても開かないのはなぜですか?
TomcatにWARをデプロイするにはどうすればよいですか?
app.war を webapps/ ディレクトリにコピーします。Tomcat が自動的に http://host:8080/app にデプロイします。または、Manager Webアプリを使用してアップロードし、デプロイすることも可能です。