(注:記事は執筆時の情報に基づいており,現在では異なる場合があります)

7.MVCモデルを採用

図1●MVCモデル
Strutsが導入しているMVCモデルは,Model(業務ロジック),View(プレゼンテーション),Controller(制御)の3種類のオブジェクトが役割を分担し,協調しあいアプリケーションを動作させるアーキテクチャである
図2●Strutsの動作
Strutsを利用して作成したWebアプリケーションがリクエストを処理し,レスポンスを生成するまでの流れを図示した

 Strutsは,ModelをJavaBeansで,ViewをJSPで,Controllerをサーブレットで実装した「MVCモデル2」と呼ばれるアーキテクチャを採用している*4。機能を極力シンプルにするというポリシーで設計されているため,MVCモデル2におけるStrutsの適用範囲は,Modelには及んでいない(図1[拡大表示])。このことは,前述のように業務ロジックを実装するModelは,JavaのクラスでもEJBでもよいことを示している。

 また,MVCモデル2を採用したことで,アプリケーションを階層化した設計,実装が容易になり,層ごとに設計や開発に携わる人員のスキルにあわせた振り分けも可能となる。

8.J2EE仕様との親和性

 プレゼンテーション部の作成にはJSPを用いており,Javaとサーブレット,JSP以外の特別な技術や知識を必要としない。また,リソース・バンドルを利用したマルチリンガル対応を考慮した機能を備えており,ブラウザの言語に応じて送り返すコンテンツの言語を自動的に変更できる。

9.モジュールによるアプリケーションの分割

 Webページが大量にあるWebアプリケーションの開発を行う場合,JSPファイル数の増大や設定ファイルの巨大化という問題が発生する。また,並行開発を行う場合にも開発単位を決定する必要がある。Strutsでは,モジュールという単位にWebアプリケーションを分割することが可能だ。モジュールごとに,あたかも別のアプリケーションのように設計,開発を行うことができる。

設定ファイルで柔軟に動作を変更

 Strutsを利用して作成したWebアプリケーションの動作を186ページの図2[拡大表示]に示す。グレーのアイテムが,開発者が用意すべき部分になる。

(1)ブラウザからHTTPリクエストが送られる。

(2)コントローラであるActionサーブレットは,指定のモジュールのRequestProcessor(モジュール内を制御するクラス。モジュールごとに存在する)へHTTPリクエストを転送する。

(3)RequestProcessorは,HTTPリクエスト中にフォーム情報がある場合,その情報を保持するためのクラスであるActionForm Bean(アプリケーション開発者が作成)にセットする(リクエストとActionForm Beanの対応はモジュール設定ファイルに記述されている)。すなわち,HTTPリクエスト内の入力フォームの情報をStrutsが自動的にBeanにセットするのである。

(4)HTTPリクエストのURLに対応した,アクション(業務ロジックを呼び出すためのクラス。アプリケーショ開発者が作成する)を呼び出す。

(5)呼び出されたActionから業務ロジックを実行。

(6)業務ロジックの結果などの,レスポンスとして表示するための情報をJavaBeansやActionForm Beanクラスにセットし,JSPからアクセス可能なコンテキストに保持する。

(7)業務ロジックの処理結果(成功・失敗など)を,ActionForwardクラス(業務ロジックの処理結果状態を保持するクラス)としてRequestProcessorに返却する。

(8)Actionから返却されたActionForwardクラスが示す状態に対応したJSPページをモジュール設定ファイルの情報から判断し,呼び出す。

(9)呼び出されたJSP内では,必要な情報を,Strutsが提供するカスタム・タグ・ライブラリなどで,コンテキストから取り出し,ページを生成する。

(10)JSPによって生成されたページをHTTPレスポンスとして返却する。

 このように,Strutsはモジュール設定ファイルにすべての動作情報が集約され,その情報に基づいて処理を行う。このファイルはモジュールごとに用意し,モジュール内の遷移情報もすべて定義されるため,アプリケーションのメンテナンス性が向上する。一見多くのアイテムを作成する必要があるように思えるが,それぞれは定型的かつ軽微な記述になることが多い。

黒住幸光(くろずみ・ゆきみつ)氏

株式会社アークシステム シニアコンサルタント。
1989年よりスーパーコンピュータ向け言語処理環境の研究に従事。1995年,生まれて間もないJavaと出会い,Javaに専念するため転職。現在,株式会社アークシステムにてオープンソース・ソフトウエアを用いたWebシステムの構築,コンサルティングを行うかたわら,雑誌への執筆,StrutsユーザML(http://www.freeml.com/info/struts-user@freeml.com)の管理,Ja-JakartaプロジェクトTurbine翻訳の取りまとめなど幅広く活動中。

(次回に続く)