JSF(JavaServer Faces)はStrutsと同じWebアプリケーション・フレームワークとしてリリースされた。両者ともMVCモデル2を採用し,ビュー(レスポンス生成)とコントローラ(ページ遷移やモデルの呼び出し制御)の機能を提供している。プレゼンテーション層をカバーするフレームワークであり,Webアプリケーションに対するカバー範囲は,Strutsとほぼ同じといえる。

 それでは,JSFが浸透した場合Strutsは不要となるのだろうか,JSFとStrutsはどちらが優れているのだろうか,両者は融合してゆくのだうか。今回はJSFとStrutsの関係にフォーカスしてゆく。

 JSFは比較的新しいテクノロジであり,実際に利用してWebアプリケーションを開発している方は,まだまだ少ないのではないだろうか。そして,JSFがプレゼンテーション層のフレームワークである事は知っていても,実際の構築方法や概要を知らない方も多いだろう。次節では,JSFの概要を紹介するが,不要な方は読み飛ばして,3ページ目からお読みいただいてもかまわない。

デファクトになる可能性を秘めるJFS

 JSFの目的は,複雑かつ様々な知識を必要とする Webアプリケーションの開発をより簡単に行うことにある。そのため,JSFは以下ようなの特徴を備えている。

・Ease of Development

 Sunの最近のキャッチフレーズの一つでもあるこのEoD(Ease of Development)は,とかく難しいとされるJavaの開発を簡単にするためのキーワードだ。EoDの名の下に,J2SEやJ2EEはより簡単に開発が行えるよう,仕様変更が加えられようとしている。

 EoDの一つの方法として,ツールによるサポートが挙げられる。ツールとの親和性を考慮した仕様を決め,開発をサポートするツールによって生産性を向上させようという方法だ。

 JSFはそのよい例だろう。JSFの各種仕様はツールによって作成されることを強く意識した仕様となっており,実際に開発ツールもいくつか登場している。これらツールを利用することで,簡単にWebアプリケーションが開発できるのがJSFだ。もちろん,JFSは開発ツールを用いなくとも,アプリケーションが簡単に作成できるようにも考慮されている。

・Device Independence

 JSFはレスポンスの生成にJSPを利用しているが,JSPが生成するレスポンスのフォーマット(HTMLなど)に規定はない。すなわち,携帯端末用のレスポンスや専用クライアント用のレスポンスなどの生成が可能である。この時,モデルは生成するレスポンス・フォーマットに依存しないように作成することが可能であり,クライアント・デバイスに非依存なアプリケーションの作成が可能となっている。

 この中でも特にEoDは,JSFの今後の広がりを左右する大切なキーワードだ。JSFにおけるEoD実現のためのツールとして, Sun はSun Java Studio Creatorを,IBMはWebSphere Studio Application Developerをリリースしている。また,Eclipse用プラグインなどもリリースされはじめている。

 これらのツールによる開発が浸透すれば,JSFは一気にWebアプリケーションのプレゼンテーション層構築テクノロジのデファクトになる可能性を秘めている。

スタンドアローンGUIアプリのようにイベント・ドリブンで開発できる

図1●JSFの仕組み
 まず簡単にJSFの仕組みを説明しよう。JSFは「MVCモデル2」と呼ばれるアーキテクチャを採用している。ビューはJSPで,コントローラはサーブレットで構成される。モデルは特別なクラスではなく,POJO=PlainOldJavaObject(通常のJava)で構成できる。

 そして,JSFでは通常のGUIをもったスタンドアローン・アプリケーションのように,Webアプリケーションを構築できるよう,「イベント」という概念が導入されている。JSFでは,「イベント」(ボタンの押下や値の変更など)が発生した時に起動されるリスナを登録できるようになっている。この仕組みによって,HTTPを経由したステートレスな通信を用いたアプリケーションであることを意識する必要がなく,簡単にWebアプリケーションを作ることができる(図1[拡大表示])。

 コンポーネント・ツリーはJSFが内部で管理する仮想的なビューで,ブラウザの状態をツリー状に表している。ブラウザに表示される項目はJSFではコンポーネントとして表現され,表示レイアウトを示すツリー構造で管理される。

 このコンポーネント・ツリーは,ブラウザからのHTTPリクエスト(1)をJSFサーブレットが受け取ると構築される(2)。構築されたコンポーネント・ツリー内のコンポーネントには,ブラウザから送信された値がセットされる。更新されたコンポーネントは,対応するモデルにもその値が反映される(3)。また,各種のリスナが登録されている場合,イベントごと(コンポーネントの値変更やボタンの押下など)にモデルが呼び出される(4)。その後,設定ファイルの定義に従い,レスポンスを生成するためのJSPを実行する(5)。JSPでは,自身に記述されているJSFのカスタムタグがコンポーネント・ツリーを参照しながら(6)レスポンスを生成する(7)。このようにして,JSFではコンポーネント・ツリーを中心にHTTPリクエストを処理してゆく。

 次に,実際のJSFアプリケーションの例を見てみよう。