Struts の全体像

Revised: 26th/Jan./2003; since:30th/Nov./2002

ここでは Struts で提供される代表的なコンポーネント紹介します。

Controller

ActionServlt

ActionServlet は javax.servlet.http.HttpServlet を拡張したクラスです。純粋にコントローラとして働き、クライアントからの要求を一元的に受け取り、処理を適切なアクション・クラスに委譲し、結果をビューの役割を果たす JSP などに渡します。

Struts 1.1 では、要求を処理する部分を別のクラス org.apache.struts.action.RequestProsessor に分離しました。ActionServlet と RequestProsessor は、具象クラスであり、デフォルトのままでも、フレームワークの中で機能します。

ActionMapping

アクション・サーブレットは、アクション・マッピング [org.apache.struts.action.ActionMappings] にしたがって、要求に特定のアクション・クラスをディスパッチします。アクション・マッピングは要求された URL パターンに対して、アクション・クラスの完全限定名をマッピングしており、ビジネスロジックをカプセル化したアクション・クラス [org.apache.struts.action.Action] へのマッピングと、応答の JSP へのマッピングを行います。アクション・マッピングを介して、ビューとコントローラは独立性を保つことができます。

開発者は、マッピング情報を WEB-INF/struts-config.xml ファイルに記述します。Struts では、この XML ファイルをパースして、適切な値を持った ActionMapping 型オブジェクトを生成してくれます。

Action

Action クラスは、要求に対して、対応するビーンなどで実装されたビジネス・ロジックの処理をハンドリングします。アクション・サーブレットによって、アクション・クラスの execute() メソッドが呼び出され、この中で、認証、バリデーションなどの処理を実行して、適切なビジネスロジックを呼び出します。小さいケースの場合は、この中に直接ビジネスロジックを実装することもあるでしょう。

典型的な場合には、必要なビジネス・ロジック毎に Action クラスのサブクラスを作り、execute() メソッドをオーバーライドします。全ての処理に共通する部分を持たせたいならば、 Action クラスを継承した抽象クラスで実装し、個々の具体的なアクションは、その抽象クラスを継承すればよいでしょう。

ActionForward

アクション・クラスの execute() メソッドの戻り値型は ActionForward クラスです。このクラスは、アクション・サーブレットに対して、次に制御をどこに渡すのかを指示するものです。このフォワード先も、マッピングと同様に構成ファイル struts-config.xml に記述します。

Model

アクション・クラスから呼び出されるビジネス・ロジックがどのように実装されるかについて、Struts は規定しません。それは、バックエンドのレガシーシステムかもしれませんし、 JDBC を使って RDBMS にアクセスするビーンかもしれません。

View

ActionForm

ActionForm [org.apache.struts.action.ActionForm] オブジェクトは、クライアント要求のフォーム情報を保持して、アクション、ビジネスロジック、ビュー間でやり取りするのに使われるものです。

DynaActionForm

1.1 で追加された新しいコンポーネントで、ActionForm クラスの簡易クラスです。struts-config.xml の form-bean 要素によって生成されます。特別な処理が必要ない場合は、 ActionForm クラスを継承したサブクラスを実装するよりも、こちらの方が簡単で良いでしょう。

MessageResources

Struts ではメッセージのローカライズの思想に基づき、 message recource アプローチをとっています。これは、フィールドのラベルやメッセージを MessageRecources [org.apache.struts.util.MessageResources.MessageResources] から取得するもので、メッセージやラベルを一元管理する仕組みを提供します。例えば、別言語を追加するときには、対応するメッセージ・リソース・ファイルを一つ追加すれば、Java のリソースバンドルを利用してロケールに応じた言語で出力されるようになります。



Copyright © 2002-2003 SUGAI, Manabu. All Rights Reserved.
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送