ソフトウェア開発の現場では、パターン化されたプログラムを書くことが多くあります。
例えば、どんなWebアプリケーションでも次のような処理をする必要があるでしょう。
こうしたパターン化された機能をあらかじめ用意しておき、それらをあらゆるWebアプリケーションで利用し、プログラマは個々のプログラムに固有の機能を追加するだけで済んだら便利です。
このような目的で作られたソフトウェアのことを「フレームワーク」と言います。
フレームワークを利用することで、決まったパターンをわざわざ書く必要がなくなり、プログラム開発が楽になります。
JSF (JavaServer Faces)は、Webアプリケーションを作成するためのフレームワークです。
最近のJava技術には、「EoD (Ease of Development)」という考え方があります。「いかにラクにソフトウェアを開発するか」ということです。J2SE 5.0やEJB 3.0、そして今回とりあげるJSFにも、このEoDの考え方が取り入れられています。
JSFでのWebアプリケーション作成は簡単です。現在ではJavaでWebアプリケーションを作成するときには、"Struts"などのフレームワークを利用するケースがほとんどですが、JSFではStrutsよりも簡単にWebアプリケーションを作成できるのです。
また、JSFは「開発ツール」でのWebアプリケーション開発を容易にする技術でもあります。開発ツールを使えば、GUIのアプリケーション開発のように、UIコンポーネントをドラッグ&ドロップしてWebアプリケーションを作成できます。
昨年(2004年)は、JSF (JavaServer Faces)元年とも言うべき年でした。3月には正式版(Version 1.0)がリリースされ、今年の末にリリースされる予定のJ2EE 5.0にもJSFが含まれることが決定しました。また7月にはSun Microsystems社からJSFに対応したWebアプリケーション開発ツールである「Sun Java Studio Creator」がリリースされました。アプリケーションサーバの大手ベンダーも、自社の開発ツールでのJSFサポートを表明しています。
JSFには、大きく見ると2つの特徴があります。
この2つの特徴について、詳しく見てみましょう。
JSFでは、Strutsなどと同様に、MVCモデル2によるWebアプリケーションのフレームワークが用意されています。
MVCモデル2では、アプリケーションを構成するコンポーネントが、「モデル(Model)」・「ビュー(View)」・「コントローラ(Controller)」と名づけられた、3つの部分に分けられています(図1.1[MVCモデル2])。
JSFでは、従来のWebアプリケーションフレームワークと同じく、Controllerははじめから用意されています(後述するFacesServletというServletです)。あとは、ViewとModelの部分で、必要な処理を書き足すことになります。
JSFでは、「UIコンポーネント」でWebページを構成します。UIコンポーネント(User Interface Component)とは、ラベル・テキスト入力フィールド・ボタンなどのGUIの部品のことです。
WindowsのVisula Basicや、JavaのSwingは、いずれもUIコンポーネントを組み合わせてユーザインタフェースを作成します。JSFでは、このようなスタイルでWebの画面を作成していくのです。
JSFでは、従来のUIコンポーネントと同じく、「ボタンが押された」「テキストフィールドの値が変わった」といった「イベント」を処理する機能を持っています。
また、「プロパティ」というものを操作することによって、UIコンポーネントの挙動を変更できます。
ではさっそく、JSFのサンプルアプリケーションを動かしてみましょう。
まずは、ダウンロードするソフトウェアをを挙げてみます。
いよいよサンプルアプリケーションを動かします。ここでは、JSF 1.1.01に入っている「guessNumberサンプルアプリケーション」について解説します。
guessNumberは、JavaのマスコットキャラクターであるDukeがイメージしている数(0〜10)を当てるゲームです。ユーザは、0から10までのいずれかの数をWebブラウザに入力します。そうすると、その入力した数が当たりかどうか表示されます。
このアプリケーションを動かすには、次の手順を実行します。以下、Tomcatをインストールしたフォルダを環境変数"%CATALINA_HOME%"で表すことにします。SolarisやLinuxなど、Unix環境をお使いの方は、この環境変数を適宜読み替えてください。
Webの画面は、図1.3[guessNumber中のUIコンポーネント]のようにUIコンポーネントから構成されます。
このアプリケーションでは、図1.2[guessNumber]のように、ボタンをクリックすると画面が遷移します
このguessNumberでは、ユーザは数字を入力します。しかし、数字を入れるべきところを“wakhok”のような文字列を入力したら、エラーメッセージが表示されます。図1.4[文字列を入力したときのエラーメッセージ]の赤字で表示されている部分がエラーメッセージです。