📘 Vol.7.2：Struts2 における Controller（コントローラ）の責務

Struts2では、MVCモデルに基づいてアプリケーションを構築します。  
この章では、その中でも「Controller」に該当する **Actionクラス** の役割について解説します。

---

## ✅ Controller（コントローラ）の役割とは？

MVCモデルにおけるコントローラは、**ユーザーの入力（リクエスト）を受け取り、それに応じた処理（ビジネスロジック）を実行し、適切な画面（View）に遷移する責任**を持っています。

Struts2では、この「コントローラ」に該当するのが **Actionクラス** です。

---

## 🧱 Struts2におけるActionクラスの構成

Struts2のActionクラスは、以下のような構成で実装します。

```java
public class LoginAction extends BaseAction {

    private String userId;
    private String password;

    @Override
    public String mainProc() {
        // 認証ロジック
        if (loginSuccess) {
            return SUCCESS;
        } else {
            return ERROR;
        }
    }

    // getter/setter（JavaBeansとして扱われる）
}
```
💡 ポイント

- BaseAction はプロジェクト共通の処理（ログインチェック、セッション管理など）を担う基底クラスです。

- 各Actionクラスでは、共通化された mainProc() メソッドをオーバーライドして、個別の処理を実装します。
- mainProc() は BaseAction クラスで共通定義されたメソッドであり、各 Action クラスはこのメソッドをオーバーライドして、個別の処理を実装します。この仕組みにより、例外処理やログ出力などの共通処理を一元管理できます。

- フォームから送信された値は、JavaBeans形式でgetter/setter経由で受け渡されます。

📎 BaseActionの詳細はこちら👇  
[📘 Vol.6：BaseActionクラスの詳細解説【Struts2の要】](https://qiita.com/juehara-crypto/items/a5f244a5f58597f33d06)



---

## 📂 本プロジェクトでのActionクラスの場所
本プロジェクトでは、Actionクラス（コントローラ）は以下のパス配下に配置されています。

📎 GitHub リンクはこちら👇  
[Action クラス一覧（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)

```
Bulletinboard/
└── src/
    └── main/
        └── java/
            └── com/
                └── company/
                    └── bulletinboard/
                        └── action/
                            ├── LoginAction.java
                            ├── CreateUserAction.java
                            └── ...
```

---


## 🧭 struts.xmlとの連携
ActionクラスとURLの対応付け、画面遷移の制御などは、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>
```

このように、URL「login.action」にアクセスがあった場合に LoginAction クラスの mainProc() メソッドが実行され、
処理結果に応じて以下の画面に遷移します。

- login → /login.jsp （未ログインなどの状態）

- admin → /view/ManagementMenu.jsp （管理者ログイン成功）

- user → /view/userPortal.jsp （一般ユーザーログイン成功）

- input → /login.jsp （入力バリデーションエラー）

📌 struts.xml の詳細については、[次回のVol.7.3](https://qiita.com/juehara-crypto/items/54dc2e0a4d56845a1a61)で詳しく解説予定です。


## ✍️ まとめ
- Struts2におけるControllerは Actionクラス であり、ユーザーのリクエストに応じた処理を行う。

- 共通の基底クラス BaseAction を継承し、mainProc() メソッドをオーバーライドして処理を記述するのが本プロジェクトの実装方針。

- struts.xml によりActionとURL・遷移先のビューを定義できる。
---

📘 次回予告：
[📘 Vol.7.3：Struts2 における struts.xml の書き方と役割](https://qiita.com/juehara-crypto/items/54dc2e0a4d56845a1a61)

Struts2の核ともいえる struts.xml の設定内容やルールについて、具体的なコード例を交えて詳しく解説します。


---

## 🧭 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.3 | [Struts2 における struts.xml の書き方と役割](https://qiita.com/juehara-crypto/items/54dc2e0a4d56845a1a61) | URLマッピング、結果遷移、アクション定義の方法を丁寧に記述。初心者の詰まりやすいポイントを回避。 |
| Vol.7.4 | [struts.xmlの高度な設定と実践活用（Struts2）](https://qiita.com/juehara-crypto/items/bf03adbd840c8f4e2044) | namespaceの活用や画面単位での分離設計、開発時の保守性向上テクニックを紹介。 |

---