Struts2プロジェクトにおけるstruts.xml
は、単なる画面遷移の定義ファイルにとどまらず、アプリケーション全体の振る舞いを制御する「核」とも言える存在です。
この回では、以下の内容に踏み込み、実用的な構成の理解を深めていきます。
🔸 本記事の内容
-
struts.xml
の構成と役割(復習) -
<package>
の意味と用途 -
<interceptors>
と共通処理の活用 -
🔹 独自Interceptorの定義(実践では
BaseAction
に集約) -
実際の
struts.xml
全体例(本プロジェクトより抜粋)
✅ struts.xml の構成(おさらい)
以下は典型的な構成例です。
<struts>
<constant name="struts.devMode" value="false" />
<package name="default" extends="struts-default">
<action name="login" class="com.example.LoginAction">
<result name="success">/home.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
このように、Struts2では <package>
配下に <action>
をまとめ、共通の遷移制御・エラー処理などを定義していきます。
🔹 <package>
の役割
-
アクションのグループ化
各機能単位(例:ユーザー管理、掲示板管理)でアクションをまとめることができます。 -
共通設定の継承
extends="struts-default" により、デフォルトの設定(エラーハンドリング、バリデーションなど)を活用できます。 -
namespace指定も可能
namespace="/admin" といった形でURLの階層構造を整理することも可能です。
🔹 <interceptors>
と共通処理
Struts2では、アクションが呼び出される前後に 共通処理(Interceptor) を差し込むことができます。
例:struts-default に含まれるInterceptorスタック
<default-interceptor-ref name="defaultStack" />
これにより、以下のような機能が自動的に適用されます:
-
パラメータの自動バインディング
-
バリデーション
-
ファイルアップロード
-
ログインチェック(自作可能)
🔹 独自Interceptorの定義(プロジェクトでは BaseAction で共通化)
Struts2では <interceptor>
を自作して、以下のような機能を差し込むことができます:
-
セッションユーザーの有無チェック
-
権限ロールの検査
-
処理前後の共通ログ出力
ただし、本プロジェクトでは アクションの共通基底クラス BaseActionクラス
にロジックを統合 することで、Interceptorに相当する共通処理を簡潔に実装しています。
BaseActionクラスの特徴
-
ServletRequest/Response取得
-
ログインセッションの検証
-
メッセージ制御(例:「キャンセルがクリックされました」など)
📦 実際の struts.xml
全体例(本プロジェクトより)
以下は、GitHubリポジトリ で使用している構成例からの抜粋です。
<package name="default" extends="struts-default">
<!-- ログイン -->
<action name="login" class="com.company.bulletinboard.action.LoginAction">
<result name="success">/view/userPortal.jsp</result>
<result name="error">/view/error.jsp</result>
</action>
<!-- ログアウト -->
<action name="logout" class="com.company.bulletinboard.action.LogoutAction">
<result name="success">/view/LoginScreen.jsp</result>
</action>
<!-- 掲示板管理画面 -->
<action name="list" class="com.company.bulletinboard.action.ListAction">
<result name="success">/view/BulletinboardManagementScreen.jsp</result>
</action>
<!-- その他、キャンセル・作成・編集など多様なアクション定義 -->
</package>
📌 詳細全体はGitHubで閲覧可能です:
🔗 struts.xml を見る
✍️ まとめ
-
struts.xml
は アクション定義 と 画面遷移制御 の中心 -
<package>
を使って整理することで拡張性UP -
Interceptorに頼らず BaseActionで共通処理 をまとめるアプローチも有効
▶️ 次回予告
「📘 Vol.8.0:【Struts2】OGNL入門 〜タグライブラリを支える最重要基礎技術〜」
次回は以下を予定しています:
-
JSP側の
<s:form>
やOGNL式の活用 -
入力チェックとエラー表示のバリデーション機構
-
fieldErrors
の利用パターン
ご意見・ご質問はコメントでお寄せください!✨
🔗 Vol.7.3:struts.xml の基本構成と用途 もあわせてどうぞ!
🧭 Vol.1〜7 関連リンク
回 | タイトル | 主な内容 |
---|---|---|
Vol.1 | プログラミングとの再会 – 「画面ありき」で変わった学び方 | プログラミング再入門と、画面駆動の学習法というユニークなアプローチの紹介。最初に「画面」から考えることでモチベーションを継続。 |
Vol.2 | 画面駆動設計に基づく設計書の具体例:画面フローからUI設計・処理定義まで | 実際に描いた画面遷移図・UI設計・処理定義書を公開し、画面中心の設計手法を解説。 |
Vol.3 | 詳細設計編:ER図で見るデータ構造と実装の土台 | 実装前提で設計された ER図(Entity Relationship 図) をもとに、データ構造と整合性を設計。 |
Vol.4 | Struts2とMavenの基礎と設定ファイルの役割 | Struts2の構成とMavenでの管理、web.xml や pom.xml の役割を丁寧に解説。 |
Vol.5 | 環境構築編:掲示板アプリケーションの実行準備 | TomcatとEclipseでの動作環境構築。 |
Vol.6 | BaseActionクラスの詳細解説【Struts2の要】 | すべてのアクションに共通する基底クラス BaseAction を定義し、ログ出力や共通処理を集約。 |
Vol.6.1 | BaseAction の活用例【共通基底クラスでセッション管理を簡素化】 | 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マッピング、結果遷移、アクション定義の方法を丁寧に記述。初心者の詰まりやすいポイントを回避。 |