はじめに
Struts2 は、Java を用いた Web アプリケーション開発における定番の MVC フレームワークのひとつです。
本章では、Struts2 フレームワークにおける MVC モデルの構成と、それぞれの役割・関係性を全体的に俯瞰して解説します。
これにより、後続の「Model 偏」「View 偏」「Controller 偏」の章にスムーズに入っていけるようにすることが目的です。
MVCモデルとは?
まず、MVC とは次の3つの役割にアプリケーションを分離して設計するアーキテクチャパターンのことです:
略称 | 役割 | 説明 |
---|---|---|
Model | モデル | アプリケーションの「データ」や「ビジネスロジック」を担当します。例:JavaBeans、DAOなど |
View | ビュー | ユーザーに見える「画面」を担当します。Struts2では主にJSP + タグライブラリで構成されます |
Controller | コントローラー | ユーザーのリクエスト処理の振り分けを行います。Struts2ではActionクラスがこの役割を担います |
-
Model
データの管理や業務ロジックを担当し、データベースアクセス(DAO)やJavaBeansを含みます。
Model層では、データベースとのやりとりを担うDAOや、データ構造を保持するJavaBeansが利用されます。
👉 JavaBeansは、プロパティ(データ)に対してgetter/setterを使ってアクセスするシンプルなJavaオブジェクトのことです。
例えばユーザー情報や掲示板のスレッド情報などを保持するクラスが該当します。
-
Controller
Controller 層では、リクエストを受け取る Action クラスが配置されます。
👉 Struts2 の Action クラスは POJO(Plain Old Java Object)として実装できるため、特別な継承やインターフェースの実装が不要です。これにより、柔軟でテストしやすい設計が可能になります。
※この POJO 特性は、Spring Framework などと比較される際にも Struts2 の特徴のひとつとして挙げられます。
Struts2 における MVC の全体構成
Struts2 フレームワークでは、それぞれの要素が次のような形で構成され、連携しています
以下は、Struts2 における MVC モデルの処理フロー図です:
この図は、Struts2 における典型的なリクエスト〜レスポンスの流れを表しています。各レイヤーの責務を理解することで、今後の開発がよりスムーズになります。
Struts2 のリクエスト処理フロー(簡略版)
Struts2 フレームワークでは、次のような順序でリクエストが処理されます。
- ユーザーがブラウザで画面を操作
- Actionクラスが呼び出される(Controller)
- 必要に応じて Model(DAOやJavaBean)と連携してデータを取得・更新
- Actionクラスが処理結果を元にどのJSPを表示するかを決定
- JSP(View)がレンダリングされてユーザーにレスポンスが返る
Struts2 の特徴的なポイント
Struts2 の MVC モデルには、以下のような独自の特徴があります:
-
Controller が Action クラス単位で構成されている
→ 各 URL(例:/list.action
)ごとに独立した Action クラスを設計できる。 -
View として JSP + Struts タグライブラリを使用
→s:iterator
やs:property
などのタグで、Action から渡されたデータを簡潔に画面表示可能。 -
Model は自由度が高い(DAO + JavaBeans、サービス層など設計方針により自由)
-
設定ファイル(
struts.xml
)によって URL と Action の対応関係を柔軟に制御できる
補足:Struts2 と Servlet/JSP の違い
Struts2 の最大の利点は、従来の Servlet + JSP 直書きによる開発よりも、責務が分離されて保守性が高い点です。
観点 | Servlet/JSP | Struts2 |
---|---|---|
画面ロジック | JSP に直書き | タグライブラリでシンプルに記述 |
リクエスト処理 | doPost/doGet に集中 | Action クラスごとに分割可能 |
データの受け渡し | Request 属性で直接やりとり | 自動的にプロパティへマッピング(OGNL) |
▶️ 次回予告
「Vol.7.1:Struts2 における Model(モデル)について」 では、「Model(モデル)」について深掘りしていきます。
-
DAO(Data Access Object)の役割とは?
-
JavaBeans でどうやってデータを受け渡すのか?
-
Model は Controller や View とどう連携するのか?
Struts2 における Model の実態を、実例を交えながら分かりやすく解説していきます!
🧭 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.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の活用や画面単位での分離設計、開発時の保守性向上テクニックを紹介。 |