📘 Vol.7.3：Struts2 における struts.xml の書き方と役割 

本記事では、Struts2 フレームワークにおいて中核を成す設定ファイル `struts.xml` の役割と構成、そして処理の流れについて詳しく解説します。

---

## 🧭 全体の処理の流れ（login.jsp を例に）

Struts2 アプリケーションでは、画面（JSP）から送信されたリクエストが `struts.xml` の設定に従って `Action` クラスにマッピングされ、そこでロジックが処理されます。

ここではログイン処理を例に、**処理の始まりから終わりまで**を順を追って見ていきます。

---

### 1️⃣ アプリケーション起動直後に最初に読み込まれるページ（web.xml）

```xml
<welcome-file-list>
  <welcome-file>login.jsp</welcome-file>
</welcome-file-list>
```

- アプリ起動時、まずこの設定により login.jsp が呼び出されます。

- web.xml はアプリケーションの起点を定義する デプロイメントディスクリプタ です。

---

### 2️⃣ ユーザーがログインフォームから情報を入力し、送信

```
<s:form action="login" method="post">
  <label>ユーザー名:</label>
  <s:textfield name="user.user_name" label="ログインID" />
  <br><br>
  <label>パスワード:</label>
  <s:password name="user.password" label="パスワード" />
  <br><br>
  <s:submit value="ログイン" />
</s:form>
```

- action="login" により、login.action という URL に POST リクエストが送られます。

- この時点ではまだ JSP 側しか見えていませんが、この action 名は Struts2 の struts.xml によって解釈されます。

---

### 3️⃣ Struts2 のエントリポイント：struts.xml

```
<action name="login"
  class="com.company.bulletinboard.action.login.LoginAction">
  <result name="login">/login.jsp</result>
  <result name="admin">/view/ManagementMenu.jsp</result>
  <result name="user">/view/userPortal.jsp</result>
  <result name="input">/login.jsp</result>
</action>
```

- name="login" により、login.action のリクエストがこの `<action>` にマッチします。

- class="LoginAction" が処理を担当します（Controller の役割）。

- result name="○○" により、LoginAction の戻り値に応じて遷移先の JSP を切り替えます。


### 🔁 つまり、何がトリガーなのか？
Struts2 におけるトリガー（起点）は、JSP などで指定される <s:form action="xxx"> の action 名です。
これが内部的には xxx.action という URL にマッピングされ、struts.xml の <action name="xxx"> によって該当の Action クラスが呼ばれます。

---


### 📌 Struts2 の処理フロー図（簡略）

```
Webブラウザ
    ↓ ①アクセス
web.xml
    ↓ ②login.jsp 表示
login.jsp の <s:form action="login">
    ↓ ③POST: login.action
StrutsPrepareAndExecuteFilter（内部）
    ↓
struts.xml の <action name="login">
    ↓
LoginAction（BaseAction 継承）
    ↓ ④mainProc() 実行 → 戻り値で遷移
    ↓
結果に応じて JSP 表示
```

---

### 🛠 struts.xml の役割まとめ

| 項目                  | 説明                           |
| ------------------- | ---------------------------- |
| `<action name="～">` | JSP の `action` 属性と対応するリクエスト名 |
| `class="～"`         | 対応する Action クラス（Controller）  |
| `<result name="～">` | Action の戻り値に応じた遷移先の JSP      |
| `input`             | バリデーションエラー時の戻り先（自動で処理される）    |

---

📎 関連リンク
🔄 Vol.7.2：Struts2 における Controller（コントローラ）の責務
https://qiita.com/juehara-crypto/items/06b4f9296a296db8f4ba

🧱 Vol.5：共通処理クラス（BaseAction）の設計と活用
https://qiita.com/juehara-crypto/items/a5f244a5f58597f33d06

💻 GitHub ソースコードはこちら
https://github.com/juehara-crypto/Portfolio_Bulletinboard/tree/master/03.%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0/Bulletinboard/src/main/java/com/company/bulletinboard/action

---

### 🧩 次回予告（Vol.7.4）
[📘 Vol.7.4：struts.xmlの高度な設定と実践活用（Struts2）](https://qiita.com/juehara-crypto/items/bf03adbd840c8f4e2044)


---

## 🧭 Vol.1〜7 関連リンク

| 回 | タイトル | 主な内容 |
|----|----------|-----------|
| Vol.1 | [プログラミングとの再会 – 「画面ありき」で変わった学び方](https://qiita.com/juehara-crypto/items/2fcc53d765dcc25a4fa3) | プログラミング再入門と、**画面駆動の学習法**というユニークなアプローチの紹介。最初に「画面」から考えることでモチベーションを継続。 |
| Vol.2 | [画面駆動設計に基づく設計書の具体例：画面フローからUI設計・処理定義まで](https://qiita.com/juehara-crypto/items/c1fd34b3031b13160f27) | 実際に描いた**画面遷移図・UI設計・処理定義書**を公開し、画面中心の設計手法を解説。 |
| Vol.3 | [詳細設計編：ER図で見るデータ構造と実装の土台](https://qiita.com/juehara-crypto/items/6e6431954dc99ea59054) | 実装前提で設計された **ER図（Entity Relationship 図）** をもとに、データ構造と整合性を設計。 |
| Vol.4 | [Struts2とMavenの基礎と設定ファイルの役割](https://qiita.com/juehara-crypto/items/e37fa1879ae996bee73e) | Struts2の構成とMavenでの管理、`web.xml` や `pom.xml` の役割を丁寧に解説。 |
| Vol.5 | [環境構築編：掲示板アプリケーションの実行準備](https://qiita.com/juehara-crypto/items/7010ae45d35174d3a3a6) | TomcatとEclipseでの動作環境構築。 |
| Vol.6 | [BaseActionクラスの詳細解説【Struts2の要】](https://qiita.com/juehara-crypto/items/a5f244a5f58597f33d06) | すべてのアクションに共通する基底クラス **BaseAction** を定義し、ログ出力や共通処理を集約。 |
| Vol.6.1 | [BaseAction の活用例【共通基底クラスでセッション管理を簡素化】](https://qiita.com/juehara-crypto/items/f4efded5b26e39e49928) | BaseAction を継承する具体的なアクション例を紹介し、セッションやログ処理の統合例を実践。 |
| Vol.7 | [Struts2 における MVC モデルの全体像](https://qiita.com/juehara-crypto/items/761c0b13ed1a5f896bba) | Model-View-Controller の各要素が Struts2 でどう分担されるかを体系的に解説。 |
| Vol.7.1 | [Struts2 における Model（モデル）について](https://qiita.com/juehara-crypto/items/14f7f154caf29447ae93) | JavaBeansベースのModelクラス（User, Thread, Post など）設計とその役割を明確化。 |
| Vol.7.2 | [Struts2 における Controller（コントローラ）の責務](https://qiita.com/juehara-crypto/items/06b4f9296a296db8f4ba) | Actionクラスを軸に、入力処理・分岐処理・画面遷移の中核を担うControllerの実装指針を提示。 |
| Vol.7.4 | [struts.xmlの高度な設定と実践活用（Struts2）](https://qiita.com/juehara-crypto/items/bf03adbd840c8f4e2044) | namespaceの活用や画面単位での分離設計、開発時の保守性向上テクニックを紹介。 |

---