モデル-ビュー-コントローラデザインパターンに忠実に、Strutsアプリケーションは主に3つのコンポーネントを持っています :
Servletコントローラ(Strutsによって提供される)、JavaServer Pages("ビュー")、およびアプリケーションのビジネスロジック(あるいは"モデル")。
これら全てがお互いにどのように適合するかたどってみましょう。
コントローラは、JavaServer Pageや開発者によって作られるorg.apache.struts.action.Actionのサブクラスなど、
フレームワーク中の他のオブジェクトに対してHTTPリクエストを束ねて送ります。
初期化された時、コントローラは設定リソースファイルを解析します。
設定リソースは、(色々な事項の中で)アプリケーションに関するorg.apache.struts.action.ActionMappingを定義します。
コントローラはHTTPリクエストをアプリケーションアクションに向けるために、これらのマッピングを使用します。
アクションマッピングは通常以下のように定義されます:
- リクエストパス (または "URI")、
- リクエストに従い動作するオブジェクトの型 (アクションのサブクラス) 、
- 及び、必要となる他のプロパティ
アクションオブジェクトは、クライアント(通常はWebブラウザ)に対するリクエストやレスポンスを処理することができます。
また、どこかへ制御がフォワードをされることを示します。
例えば、ログインが成功した場合、ログインアクションはメインメニューにリクエストをフォワードしようとするでしょう。
アクションオブジェクトはアプリケーションのコントローラサーブレットやサーブレットのメソッドに対するアクセスができます。
アクションオブジェクトが制御をフォワードする場合、JavaBeanなどの共有されるオブジェクトをJavaサーブレットにより共有される標準コレクションの一つに格納することにより、
間接的にフォワードすることが来ます。
アクションオブジェクトはショッピングカートbeanを作成し、
カートにアイテムを加え、セッションコレクションにbeanを置いて、
別のマッピングに制御をフォワードすることができます。
マッピングはユーザのカート内容を表示するためにJSPを使うでしょう。
各クライアントが自分のセッションを持っているので、勿論各々自分のショッピングカートを持つことができるでしょう。
Strutsアプリケーションでは、ほとんどのビジネスロジックはJavaBeansを使用して表すことができます。
アクションはJavaBeanのプロパティを、それらが実際にどのように動作するかを知らなくても呼び出すことが出来ます。
これによりビジネスロジックがカプセル化され、それによりアクションはエラーハンドリングと、制御をどこにフォワードするのかだけに集中できます。
JavaBeansは入力フォームを管理するためにも使用することができます。
Webアプリケーションの設計中の重要な問題は、リクエスト間でユーザが入力したものを保持し検証することです。
Strutsでは、org.apache.struts.action.ActionFormのサブクラスを作ることで簡単にフォームbeanクラスを作ることができます。
そして、入力フォームのデータを簡単に保管することができます。 フォームbeanは、標準(共有コンテキストコレクション)の1つの中に保存され、
それにより他のオブジェクト、特にアクションオブジェクトからも使用することができます。
フォームbeanは、ユーザからのデータを集めるためにJSPによって利用されます...
ユーザ入力の検証のためにアクションオブジェクトによって利用されます...
そしてフォームフィールドを再設定するために再びJSPによって利用されます。
バリデーションエラーの場合、Strutsにはエラーメッセージを上げて表示するための共有メカニズムがあります。
Strutsのフォームbeanは設定リソースの中で定義され、共有プロパティ名を使用してアクションマッピングとリンクされます。
リクエストがフォームbeanを使うアクションを呼ぶ場合、コントローラServletはフォームbeanを取り出すか、あるいは生成し、
それをアクションオブジェクトへ渡します。
その後、その入力フォームが表示される前に、アクションオブジェクトはフォームbeanの内容をチェックし、
そしてフォームが扱えるようにメッセージをキューすることができます。
準備ができている場合、アクションオブジェクトはその入力フォーム(普通はJSP)に対するフォワーディングを備えた制御を返すことができます。
その後、コントローラはHTTPリクエストに応答することができ、Java Server Pageにクライアントを向けることができます。
Strutsフレームワークは、自動的にフォームbeanの内容をフィールドに設定できるカスタムタグを。
あとフレームワークについて、多くのJavaServe Page が知る必要のある唯一のことは、
適切なフィールド名およびフォームをどこにサブミットするかです。
アクションによってキューされたメッセージのようなコンポーネントは、
単一のカスタムタグを使用して出力することができます。
他のアプリケーション特有のタグも、JSPから実装の詳細を隠すように定義ができます。
Strutsフレームワークにおけるのカスタムタグは、
Javaプラットフォームに組み込まれた国際化機能を使用するように設計されています。
全てのフィールドラベルおよびメッセージはメッセージリソースから取り出すことができます。
また、Javaはクライアントの国および言語に合ったリソースを、自動的に供給することができます。
別の言語にメッセージを供給するためには、単に別のリソースファイルを追加してください。
国際化の観点は別にして、このアプローチへの別の利点は、フォーム間で一貫したラベルを付けられることと、
一箇所からラベルおよびメッセージをすべて調査できることです。
最も単純なアプリケーションでは、アクションオブジェクトがリクエストに関連したビジネスロジックを扱うでしょう。
しかしほとんどの場合、アクションオブジェクトは実際のビジネスロジックを実行するために、別のオブジェクト(普通はJavaBean)を呼び出すべきです。
これは、アクションをビジネスロジックよりも、エラーハンドリングや制御フローに集中させることになります。
他のプラットフォーム上の再利用できるように、ビジネスロジックJavaBeansは如何なるWebアプリケーションオブジェクトも参照すべきではありません。
アクションオブジェクトはHTTPリクエストから必要とされる詳細を解釈して、規則的なJava変数としてそれらをどんどんビジネスロジックbeanへ渡すべきです。
例えば、データベースアプリケーションでは、このようになります:
- ビジネスロジックBeanはデータベースに接続し参照を行い、
- ビジネスロジックBeanはアクションに結果を返し、
- アクションはリクエストのフォームBeanに結果を格納し、
- JSPが結果をHTMLのフォームに表示する。
アクションもJSPも結果がどこから来るのか、知る必要も(気にする必要も)ありません。
どのようにパッケージされていて、どのようにそれを表示すればよいのか、さえ知っていればよいのです。
このユーザーガイドの残りでは、様々なStrutsコンポーネントについてより詳しく説明します。
Strutsのリリースは、もちろんフレームワークの様々な様相をカバーするいくつかの開発者ガイド、
サンプルアプリケーション、
標準のJavaDoc API、それともちろん完全なソースコードを含んでいます!
StrutsはApache Software Foundation ライセンスの基で配布されます。
コードは著作権保護されていますが、任意のアプリケーションで自由に使用することができます。詳細に関しては、
ASFライセンスをご覧下さい。