0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

📘 Vol.6.1 BaseActionクラスの活用例【共通基底クラスでセッション管理を簡素化】

Last updated at Posted at 2025-05-19

Struts2 における BaseAction クラスの導入は、コードの共通化と保守性の向上に大きく寄与します。
ここでは、BaseActionクラス を活用しない場合活用した場合の違いを比較しながら、実践的な活用例を解説します。


✅ BaseActionクラス を活用しない場合

📌 特徴

  • 各アクションクラスで HttpSessionHttpServletRequest を個別に取得・管理する必要がある
  • セッションやリクエストパラメータの扱いが 重複・煩雑化 しやすい

✍️ 例:BaseActionクラス を使わずにセッションを扱う場合

public class SampleAction implements SessionAware {
    private Map<String, Object> session;

    @Override
    public void setSession(Map<String, Object> session) {
        this.session = session;
    }

    public String execute() {
        String userId = (String) session.get("user_id");
        System.out.println("User ID: " + userId);
        return "success";
    }
}

⚠️ 問題点

  • SessionAware を 毎回実装 しなければならない

  • セッションキーの取得処理が 各クラスに分散

  • リクエスト処理も同様に ServletRequestAware を実装する必要がある


✅ BaseActionクラス を活用した場合

📌 特徴
BaseActionクラス が SessionAware, ServletRequestAware を実装しており、すべての子クラスで 共通的にセッション/リクエストを利用可能

各アクションクラスでは ビジネスロジックに集中 できる

✍️ BaseActionクラス の例

public abstract class BaseAction extends ActionSupport
        implements SessionAware, ServletRequestAware {

    protected Map<String, Object> session;
    protected HttpServletRequest request;

    @Override
    public void setSession(Map<String, Object> session) {
        this.session = session;
    }

    @Override
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }

    public abstract String mainProc();

    @Override
    public String execute() throws Exception {
        return mainProc();
    }
}

✍️ SampleAction の例

public class SampleAction extends BaseAction {
    @Override
    public String mainProc() {
        String userId = (String) session.get("user_id");
        System.out.println("User ID: " + userId);
        return "success";
    }
}

✅ メリット

  • session や request の取得処理が BaseAction に集中

  • コードの重複を排除し、保守性向上

  • 各クラスでは mainProc() にビジネス処理だけを書けば良い


💡 Struts2 における SessionAware の必要性

Struts2 では、セッションを自動的にアクションに注入する仕組みはありません。
そのため、以下のように明示的に SessionAware インターフェースを実装しない限り、セッションは取得できません。

public interface SessionAware {
    void setSession(Map<String, Object> session);
}

この仕様により、セッションを使うすべてのアクションクラスで SessionAware を実装する必要があります。
しかし、BaseActionクラス で一括実装しておくことで、この問題を回避できます。


✅ まとめ

項目 BaseAction なし BaseAction あり
セッション取得 各クラスで毎回実装 BaseAction で共通化
リクエスト取得 同上 同上
重複コード 多くなる 減る
保守性 低い 高い
責務分離 難しい 実現しやすい

BaseActionクラス を活用しつつ、Struts2 の仕様を理解しておくことで、
より効率的でメンテナンス性の高い Web アプリケーション開発が実現できます!


📝 次回(Vol.7)
📘 Vol.7:Struts2 における MVC モデルの全体像


🧭 Vol.1〜7 関連リンク

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?