Powered by SmartDoc

JSF概説

はじめに

いまJavaの技術は、3つのグループに整理されています。Java2 Platform, Enterprise Edition (以下J2EE)は、企業情報システムなどで必要となる技術を定めたものです。

J2SE (Java 2 Standard Edition)
WindowsなどのPCなどで利用されるJava (Javaの基本部分)
J2EE (Java 2 Enterprise Edition)
ショッピングサイトや企業情報システムなど、アプリケーションサーバで利用されるJava
J2ME (Java 2 Micro Edition)
携帯電話やPDAなどで利用されるJava

J2EEは、現在広く普及しているWebと、企業で使われているデータベースを組み合わせて使うことが強く意識されています。

この講義では、J2EEのうち、JSF (JavaServer Faces)という技術を使った「Webアプリケーション」の作り方についてお伝えします。

WebアプリケーションとJ2EE

「Webアプリケーション」とは何か?

現在では、ほとんどのパソコンや携帯電話にはWebブラウザが搭載され、Webページが世の中にあふれています。ユーザはリンクをクリックしたり、URLを入力したりすることで、あるWebページを見ることができます。しかし、Webページの中には、ユーザがWebページに何かを入力して使うものもあります。一例として、Googleなどのサーチエンジンについて考えてみましょう。ユーザは次のようにしてGoogleを使うことでしょう。

  1. Googleのページを呼び出す
  2. 調べたい言葉を入力する
  3. 検索ボタンを押す
  4. その言葉に関するWebページのリストが出力される
  5. リストの中からWebページを選んで見てみる

サーチエンジンは、入力された言葉に関するWebページのリストを出力します。入力される言葉が違えば、当然ながら出力されるリストも変化します。ユーザからの入力によって出力結果が変化するので、このようなWebページは「動的な」Webページと呼ばれます。一方で、ユーザからの入力を必要としない普通のWebページは、「静的な」Webページと呼ばれることがあります。

サーチエンジンの他にも、ユーザからの入力が必要になるWebページがたくさんあります。

こうしたWebページは、すべて「ユーザがWebブラウザを使って何かを入力し、必要な結果を得る」という働きをします。この働きは、PCで動く通常のアプリケーションとよく似ています。そこで、先に挙げたようなWebページは「Webアプリケーション」と呼ばれることがあります。

なぜWebアプリケーションなのか

先に述べたように、Webアプリケーションは、インターネット上ではもちろん、イントラネットでもよく使われています。その理由は何でしょうか?

それは、Webが十分に普及しており、取り扱いも楽だからです。

Webアプリケーションを使う側にとっては、それこそどこにでもあるWebブラウザを使ってURLを呼び出すだけで、Webアプリケーションを使えます。特定のソフトウェアをインストールする必要はありません。また、Webブラウザの操作は簡単です。

Webアプリケーションを提供する側にもメリットがあります。WebアプリケーションはWebサーバ上に置かれています。そのため、各ユーザのコンピュータにアプリケーションをインストールする必要がなく、サーバ上で集中管理できるので、機能を追加したりバグを修正したりといったメンテナンスが楽になります。

データベースの利用

Webアプリケーションでは、通常のアプリケーションと同じようにデータを取り扱います。例えば、次のようなデータ処理となるでしょう。

こうしたデータは、たいていの場合、保存されている必要があります。商品の在庫リストが消えてしまったら、大変ですよね。データを保存して活用するには、データベース管理システム(DBMS)を通じてデータベースを使うのが便利な場合がほとんどです。

データベース管理システムを使うことによって、次に挙げるようなデータの管理に必要な処理を自動的に行ってくれます。

こうした処理を自分でプログラミングするのは、面倒な作業になります。そこで、データベースがよく利用されることになります。Javaでは、"JDBC"という技術によってデータベースにアクセスします

J2EE

J2EE (Java 2 Enterprise Edition)は、ショッピングサイトや企業情報システムなど、アプリケーションサーバで利用されるJava技術をまとめたものです。

Javaではほとんどの場合、J2EEを使ってWebアプリケーションを作成します。

Webアプリケーションでは、図1.1[3層モデル]のような「3層モデル(three-tier model)」という仕組みがよく利用されます。これは、Webアプリケーションに必要な機能を3つに分けたものです。

3層モデル

左側の層はクライアントです。WebアプリケーションではWebブラウザを用います。ユーザは、WebブラウザからあるURLを呼び出すだけで、アプリケーションを利用できます。

中間の層では、Webサーバが動いています。Apacheが代表的ですね。また、Webサーバの中に、「Webコンテナ(あるいはサーブレットコンテナ)」と呼ばれるものが組み込まれており、今回学ぶJSFのアプリケーションも、Webコンテナ内で動いています。

右側の層はデータベースです。多くのWebアプリケーションでは、さまざまなデータを取り扱います。そのために、データベースを利用するのが良い場合が多くなります。

フレームワーク

ソフトウェア開発の現場では、パターン化されたプログラムを書くことが多くあります。

例えば、どんなWebアプリケーションでも次のような処理をする必要があるでしょう。

こうしたパターン化された機能をあらかじめ用意しておき、それらをあらゆるWebアプリケーションで利用し、プログラマは個々のプログラムに固有の機能を追加するだけで済んだら便利です。

このような目的で作られたソフトウェアのことを「フレームワーク」と言います。

フレームワークを利用することで、決まったパターンをわざわざ書く必要がなくなり、プログラム開発が楽になります。

JSF とは何か

JSF (JavaServer Faces)は、Javaで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)がリリースされ、来年初頭にリリースされる予定のJava EE 5 (旧称J2EE 5.0)にもJSFが含まれることが決定しました。また7月にはSun Microsystems社からJSFに対応したWebアプリケーション開発ツールである「Sun Java Studio Creator」がリリースされました。アプリケーションサーバの大手ベンダーも、自社の開発ツールでのJSFサポートを表明しています。

JSF の特徴

JSFには、大きく見ると2つの特徴があります。

この2つの特徴について、詳しく見てみましょう。

MVCモデル2によるWebアプリケーション

JSFでは、Strutsなどと同様に、MVCモデル2によるWebアプリケーションのフレームワークが用意されています。

MVCモデル2では、アプリケーションを構成するコンポーネントが、「モデル(Model)」・「ビュー(View)」・「コントローラ(Controller)」と名づけられた、3つの部分に分けられています(図1.2[MVCモデル2])。

MVCモデル2

JSFでは、従来のWebアプリケーションフレームワークと同じく、Controllerははじめから用意されています(後の章で解説するように、FacesServletというServletです)。あとは、ViewとModelの部分で、必要な処理を書き足すことになります。

「UIコンポーネント」でWebページを構成

JSFでは、「UIコンポーネント」でWebページを構成します。UIコンポーネントとは、ラベル・テキスト入力フィールド・ボタンなどのGUIの部品のことです。

WindowsのVisula Basicや、JavaのSwingは、いずれもUIコンポーネントを組み合わせてユーザインタフェースを作成します。JSFでは、このようなスタイルでWebの画面を作成していくのです。

JSFでは、従来のUIコンポーネントと同じく、「ボタンが押された」「テキストフィールドの値が変わった」といった「イベント」を処理する機能を持っています。

また、「プロパティ」というものを操作することによって、UIコンポーネントの挙動を変更できます。

guessNumber サンプルアプリケーション

いよいよサンプルアプリケーションを動かします。ここでは、JSF 1.1.01に入っている「guessNumberサンプルアプリケーション」について解説します。

どんなアプリケーションか

guessNumberは、JavaのマスコットキャラクターであるDukeがイメージしている数(0〜10)を当てるゲームです。ユーザは、0から10までのいずれかの数をWebブラウザに入力します。そうすると、その入力した数が当たりかどうか表示されます。

guessNumber

実行方法

このアプリケーションを動かすには、次の手順を実行します。以下、Tomcatをインストールしたフォルダを環境変数"%CATALINA_HOME%"で表すことにします。SolarisやLinuxなど、Unix環境をお使いの方は、この環境変数を適宜読み替えてください。

  1. JSF 1.1.01のアーカイブのsamples/jsf-guessNumberを、%CATALINA_HOME%\webappsにコピーする。
  2. Tomcatを起動する。
  3. http://localhost:8080/jsf-guessNumber/にアクセスする。

UIコンポーネントによる画面構成

Webの画面は、図1.4[guessNumber中のUIコンポーネント]のようにUIコンポーネントから構成されます。

guessNumber中のUIコンポーネント

画面遷移

このアプリケーションでは、図1.3[guessNumber]のように、ボタンをクリックすると画面が遷移します

エラーメッセージの表示

このguessNumberでは、ユーザは数字を入力します。しかし、数字を入れるべきところを“wakhok”のような文字列を入力したら、エラーメッセージが表示されます。図1.5[文字列を入力したときのエラーメッセージ]の赤字で表示されている部分がエラーメッセージです。

文字列を入力したときのエラーメッセージ