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.7.4:struts.xmlの高度な設定と実践活用(Struts2)

Last updated at Posted at 2025-05-20

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.xmlpom.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マッピング、結果遷移、アクション定義の方法を丁寧に記述。初心者の詰まりやすいポイントを回避。

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?