Struts フレームワークおよび Model/View/Controller のデザイン・パターン

Struts はオープン・ソース・ソフトウェアのフレームワークの 1 つで、これを使用すると、Web アプリケーションを迅速かつ容易に構築できます。 このフレームワークは、Java Bean、Java サーブレット、JavaServer Page (JSP)、XML などの標準テクノロジーを利用します。 Struts は、Model 2 のアプローチに基づいたアプリケーション・アーキテクチャーを推進します。これは、Model/View/Controller (MVC) のデザイン・パターンと基本的に同じです。

Struts を使用して作成すると、複雑な Web アプリケーションでも保守がしやすくなります。 アプリケーションは、デバッグや拡張が容易になり、より分かりやすいものとなります。

Struts の最も重要な部分は MVC スタイルのコントローラーで、モデルおよびビューを提供する他のテクノロジーと統合されます。 モデルについては、Struts は JDBC や EJB などの標準データ・アクセス・テクノロジー、および Hibernate、iBATIS、Object Relational Bridge などの多数のサード・パーティー・パッケージと相互作用します。 ビューについては、Struts は JSP Standard Tag Library (JSTL) および JavaServer Faces (JSF) を含む JSP だけでなく、Velocity Templates、XSLT などのプレゼンテーション・システムともよく協調して機能します。

Struts は Apache Software Foundation (ASF) により、その Jakarta プロジェクトの一部としてホスティングされます。 Struts の詳細については、次の Web サイトをご覧ください。
http://jakarta.apache.org/struts/index.html

以下のセクションでは、Model/View/Controller のデザイン・パターンと Struts テクノロジーについて説明します。

MVC デザイン・パターンの概要

J2EE アプリケーション・プログラミング では Model 2 の別名でも知られる Model/View/Controller (MVC) のデザイン・パターン (model-view-controller design pattern) は 、プログラミング向けのデザイン・パターンとして定評があります。 表 1 に、MVC の 3 つのメイン・コンポーネントを要約します。

表 1. MVC コンポーネントの要約
  目的 説明
モデル データの保守 ビジネス・ロジックと 1 つ以上のデータ・ソース (リレーショナル・データベースなど)
ビュー データの全体または一部の表示 モデルに関する情報をユーザーに表示するユーザー・インターフェース
コントローラー モデルまたはビューに影響するイベントの処理 ユーザーがアプリケーションと対話するためのフロー制御機構手段

Model 1 と Model 2

Model 1 アーキテクチャーと Model 2 アーキテクチャーは、いずれもコンテンツの生成 (ビジネス・ロジック) をコンテンツの表示 (HTML フォーマット設定) から分離します。 Model 2 は、要求処理の大半が実行される場所が Model 1 と異なります。つまり、JSP ページ内ではなく、コントローラーによって処理が実行されます。

図 1 に示すように、JSP Model 1 アーキテクチャーでは、着信要求の処理とクライアントへの応答が JSP ページだけで行われます。

図 1. JSP Model 1 アーキテクチャー
アプリケーション・サーバー上の JSP ページは、エンタープライズ・サーバーまたはデータ・ソースに接続された Java Bean と通信して、ブラウザーからの要求を処理し、ブラウザーに応答します。
  1. ブラウザーが JSP ページに要求を送信します。
  2. JSP ページが Java Bean と通信します。
  3. Java Bean がデータベースに接続されます。
  4. JSP ページがブラウザーに応答します。

図 2 に示すように、JSP Model 2 アーキテクチャーでは、サーブレットが要求を処理し、JSP ファイルで使用される Bean またはオブジェクトを作成し、要求を転送します。

図 2. JSP Model 2 アーキテクチャー
アプリケーション・サーバー上のサーブレットは、要求を処理し、エンタープライズ・サーバーまたはデータ・ソースに接続された Java Bean をインスタンス化し、ブラウザーに応答する JSP ファイルに要求を転送します。
  1. ブラウザーがサーブレットに要求を送信します。
  2. サーブレットはデータベースに接続された Java Bean をインスタンス化します。
  3. サーブレットが JSP ページと通信します。
  4. JSP ページが Java Bean と通信します。
  5. JSP ページがブラウザーに応答します。

表 2 は、Model 1 と Model 2 のどちらがより適切であるかを判断するための基準を示しています。

表 2. Model 1 または Model 2 の使用のガイドライン
基準 Model 1 Model 2
Web アプリケーションのタイプ シンプル 複雑
開発者の作業の種類 高速プロトタイピング 変更および保守の対象となるアプリケーションの作成
作業の担当者 ビューとコントローラーを同じチームで処理 ビューとコントローラーを別のチームで処理

Struts における Model 2 の実装

Struts における Model 2 の実装では、アクション・サーブレットと呼ばれる特定タイプのサーブレットと、1 つ以上のアクション、およびアクション・マッピングを使用して、コントローラーを実装します。 さらに、フォーム Beanと呼ばれる特定のタイプの Java Bean を使用します。 図 3 に示すように、実行時の Web サーバーには、Model 2 の Web アプリケーションのビュー・コンポーネントとコントローラー・コンポーネントの両方が含まれており、第 3 層 (通常は Web サーバーの外部にある) にはモデルが含まれています。

図 3. Struts フレームワーク: Model 2 アーキテクチャー
Model/View/Controller 原理を使用して設計されたアプリケーションの構造を示すダイアグラム

表 3 は、MVC コンポーネントへの Struts の寄与を示しています。

表 3. モデル、ビュー、およびコントローラーへの Struts の寄与
コンポーネント 寄与
モデル 直接提供なし。 ただし、Struts のアクションと構成ファイルは、モデル・コンポーネントが呼び出されるような状況を制御する的確な方法を提供します。
ビュー
  • Java™クラス org.apache.struts.action.ActionForm。これをサブクラス化してフォーム Bean を作成します。この Bean は実行時に次の 2 通りに使用されます。
    • JSP ページは、表示用の関連 HTML フォームを準備するときに、Bean をアクセスします。この Bean にはフォームに入れる値が含まれます。これらの値は、ビジネス・ロジック、あるいは前のユーザー入力から提供されます。
    • Web ブラウザーからユーザー入力が戻されると、Bean はこの入力を妥当性検査し、 ビジネス・ロジックで使用するため、 または (妥当性検査が失敗した場合は) 続いて再表示するため、入力を保持します。
  • 使いやすく、かつ情報隠蔽という意味において、強力な多数のカスタム JSP タグ。 Page Designer は、フォーム Bean について多くの情報を必要としません。例えば、Bean 名および特定の Bean の各フィールド名で十分です。
コントローラー
  • Struts のアクション・サーブレットは、デプロイメントの際に提供されるルール・セットにしたがってランタイム・イベントを処理します。これらのルールは Struts 構成ファイルに含まれており、サーブレットがビジネス・ロジックから受け取るあらゆる結果に対してどのように応答するかを指定します。制御のフローを変更する場合は、構成ファイルを変更するだけですみます。
  • Struts には、org.apache.struts.action.Action という Java クラスも用意されています。Java 開発者は、これをサブクラス化して「アクション・クラス」を作成します。 実行時に、アクション・サーブレットは「アクションを実行する」ように指示されます。これはサーブレットが、インスタンス化された各アクション・クラスの execute メソッドを呼び出すことを意味します。execute メソッドから戻されるオブジェクトは、次にどのアクションにアクセスするか、またはどの JSP ファイルにアクセスするかをアクション・サーブレットに指示します。

    アクション・クラスにビジネス・ロジックを含めてしまうのではなく、アクション・クラスからビジネス・ロジックを呼び出すと いう形で再利用を行うことをお勧めします。

MVC デザイン・パターンの利点

動的 Web アプリケーションの 開発に対する Model/View/Controller 分割には、複数の利点があります。

関連概念
Struts ベースの Web アプリケーション - 概要
アプリケーション開発用の Struts ツール
Struts のアクションとアクション・マッピング
Struts フォーム Bean および Form-Bean マッピング
関連タスク
Struts を使用して優れた設計の Web アプリケーションを作成する
動的 Web プロジェクトの作成
関連資料
Struts に関する資料
Struts または JavaServer Faces の選択基準
ご利用条件 | フィードバック
(C) Copyright IBM Corporation 1999, 2004. All Rights Reserved. (C) Copyright IBM Japan 2005