| この記事の要点 |
|---|
|
WAR ファイルとは
WAR (Web Application Archive) は Java Web アプリケーションを 1 ファイルにまとめた配信形式。実体は ZIP 形式なので、ZIP 操作と同じ方法で中身を確認できます。
標準的な構造:
myapp.war
├── META-INF/
│ └── MANIFEST.MF
├── WEB-INF/
│ ├── web.xml ← デプロイメント記述子
│ ├── classes/ ← コンパイル済み .class
│ │ └── com/example/...
│ └── lib/ ← 依存 jar
│ ├── spring-core-x.x.x.jar
│ └── ...
├── index.html
├── css/
├── js/
└── images/
方法 1: unzip コマンド
# 一覧表示(展開せず)
$ unzip -l app.war
Archive: app.war
Length Date Time Name
--------- ---------- ----- ----
0 2026-05-15 12:00 META-INF/
70 2026-05-15 12:00 META-INF/MANIFEST.MF
0 2026-05-15 12:00 WEB-INF/
2048 2026-05-15 12:00 WEB-INF/web.xml
0 2026-05-15 12:00 WEB-INF/classes/
215040 2026-05-15 12:00 WEB-INF/lib/spring-core-5.3.20.jar
...
# 詳細情報付き
$ unzip -v app.war
# 特定ファイルだけ確認(標準出力)
$ unzip -p app.war WEB-INF/web.xml
# 全展開
$ unzip app.war -d extracted/
$ ls extracted/
# 特定ファイルのみ展開
$ unzip app.war WEB-INF/web.xml -d extracted/
方法 2: jar コマンド
# 一覧 (jar Table)
$ jar tf app.war
META-INF/
META-INF/MANIFEST.MF
WEB-INF/
WEB-INF/web.xml
WEB-INF/classes/
WEB-INF/lib/spring-core-5.3.20.jar
...
# 詳細表示
$ jar tvf app.war
# 全展開
$ mkdir extracted && cd extracted
$ jar xf ../app.war
# 特定ファイル展開
$ jar xf app.war WEB-INF/web.xml
# 内容確認 (一度展開する必要)
$ jar xf app.war WEB-INF/web.xml
$ cat WEB-INF/web.xml
方法 3: Windows コマンド
# PowerShell
PS> Expand-Archive app.war -DestinationPath extracted
# または GUI で右クリック → 「すべて展開」
# 拡張子を .zip にリネームすればエクスプローラから直接開ける
# 7-Zip CLI
> 7z l app.war # 一覧
> 7z x app.war # 展開
方法 4: GUI ツール
- 7-Zip: 無料、Win/Linux/Mac、WAR を ZIP として開ける
- WinRAR: Windows 定番
- The Unarchiver: Mac
- Eclipse / IntelliJ: WAR を直接プロジェクトとして開ける
中身の主要要素
web.xml(デプロイメント記述子)
<!-- WEB-INF/web.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
version="5.0">
<display-name>MyApp</display-name>
<!-- Servlet 定義 -->
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.example.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<!-- フィルタ -->
<filter>...</filter>
<!-- エラーページ -->
<error-page>
<error-code>404</error-code>
<location>/error/404.jsp</location>
</error-page>
</web-app>
# 確認
$ unzip -p app.war WEB-INF/web.xml | head -30
MANIFEST.MF
# META-INF/MANIFEST.MF
Manifest-Version: 1.0
Build-Jdk: 17.0.8
Built-By: jenkins
Implementation-Title: myapp
Implementation-Version: 1.0.0
$ unzip -p app.war META-INF/MANIFEST.MF
含まれる jar 一覧
# 依存ライブラリ一覧
$ unzip -l app.war | grep ".jar"
215040 ... WEB-INF/lib/spring-core-5.3.20.jar
123456 ... WEB-INF/lib/spring-mvc-5.3.20.jar
...
# jar の中身も見る
$ unzip -p app.war WEB-INF/lib/spring-core-5.3.20.jar | jar tf -
クラス一覧
# .class ファイル一覧
$ unzip -l app.war | grep ".class"
2048 WEB-INF/classes/com/example/HelloServlet.class
1536 WEB-INF/classes/com/example/UserController.class
...
# クラスを展開して逆コンパイル
$ unzip app.war WEB-INF/classes/com/example/HelloServlet.class -d extracted/
$ javap -c extracted/WEB-INF/classes/com/example/HelloServlet.class
WAR と JAR / EAR の違い
| 形式 | 用途 | 主な内容 |
|---|---|---|
| WAR | Web アプリ (Tomcat 等) | WEB-INF/, JSP, HTML, 静的ファイル |
| JAR | Java ライブラリ / 実行可能 jar | .class, MANIFEST.MF |
| EAR | エンタープライズアプリ | WAR + EJB JAR の集合 (主に WildFly / WebLogic) |
すべてZIP 形式。unzip / jar でどれも開ける。
Spring Boot の場合(exec jar)
Spring Boot は WAR より jar 形式が一般的。実行可能 jar も ZIP 構造:
# Spring Boot jar の中身
$ jar tf myapp.jar
BOOT-INF/ ← Spring Boot 独自構造
BOOT-INF/classes/
BOOT-INF/classes/com/example/Application.class
BOOT-INF/lib/
BOOT-INF/lib/spring-boot-3.1.0.jar
META-INF/MANIFEST.MF
org/ ← Spring Boot Loader
org/springframework/boot/loader/launch/JarLauncher.class
...
# 設定ファイル確認
$ unzip -p myapp.jar BOOT-INF/classes/application.properties
展開せずファイル内容を grep
# 全 .class ファイルから特定文字列検索 (時間がかかる)
$ unzip -p app.war | grep -a "特定文字列"
# WEB-INF/classes 内の .properties から検索
$ for f in $(unzip -Z1 app.war | grep ".properties"); do
echo "--- $f ---"
unzip -p app.war "$f"
done
# unzip + grep + awk
$ unzip -p app.war WEB-INF/web.xml | grep "servlet-class"
関連記事
子ページ
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスのソフト一覧|Blender・Metasequoiaと用途別の選び方
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Visual Studio「デザイナーを表示できません」エラーの原因と対処 2026-10-28 12:06:00
- SSH 認証に失敗しました。再試行してください の対処 2026-10-28 12:06:00
- SSH2 秘密鍵の読み込みに失敗しました の原因と対処 2026-10-28 12:06:00
- TeraTerm のよくあるエラーと対処法完全ガイド — Connection refused / 2026-10-28 12:06:00
- Visual Studio エラー一覧|コンパイルエラー・警告の確認方法と対処 2026-10-28 11:39:57
- Whitelabel Error Page の原因と消し方|Spring Boot のエラーページ 2026-10-28 11:39:57
- Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法 2026-10-28 11:39:57
- SQL WHERE 句完全ガイド 2026-10-28 11:39:57
- SQL JOIN 完全ガイド (INNER/LEFT/RIGHT/FULL OUTER) 2026-10-28 11:39:57
- tomcat の起動 / 停止ログと catalina.log・catalina.out の違い 2026-10-28 10:24:23
- Tomcat の起動確認方法 5 つ|localhost:8080・ポート・プロセス・ログ 2026-10-28 10:24:23
- Oracle 19c COMMITの使い方: 暗黙コミット・自動確定・応答不明時の確認 2026-10-28 09:59:09
- Oracle 19c DELETE文|削除対象の確認・COMMIT前の判断・ROLLBACKの条件 2026-10-28 09:59:09
- Oracle 19c INSERT文|INSERT ALL・SELECT・RETURNINGとMERGEの使い分け 2026-10-28 09:59:09
- Oracle 19cのトランザクション制御|COMMIT・ROLLBACK・分離レベルと接続設定 2026-10-28 09:59:09