Struts2 における BaseAction
クラスの導入は、コードの共通化と保守性の向上に大きく寄与します。
ここでは、BaseAction を活用しない場合と活用した場合の違いを比較しながら、実践的な活用例を解説します。
✅ BaseAction を活用しない場合
📌 特徴
- 各アクションクラスで
HttpSession
やHttpServletRequest
を個別に取得・管理する必要がある - セッションやリクエストパラメータの扱いが 重複・煩雑化 しやすい
✍️ 例: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)