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.7.5)
次回は以下を予定しています:
-
JSP側の
<s:form>
やOGNL式の活用 -
入力チェックとエラー表示のバリデーション機構
-
fieldErrors
の利用パターン
ご意見・ご質問はコメントでお寄せください!✨
🔗 Vol.7.3:struts.xml の基本構成と用途 もあわせてどうぞ!