JSF 2への第一歩──その基本と、オンラインで読める参考ガイド/チュートリアル

Oracle Java & Developers編集部
2013-12-03 18:37:00
  • このエントリーをはてなブックマークに追加

Java EE 6によるWebアプリケーション開発に臨む際、多くの方が最初に学ぶのがプレゼンテーション層を担う「JavaServer Faces(JSF) 2」だ。その基本事項と、オンラインで読める参考記事、チュートリアルを紹介する。

独自フレームワークはもう要らない。JSFはJava EEの標準Webアプリケーション・フレームワーク

 J2EE 1.4などで作られた旧式のJava EEシステムの更改を機に、Java EE 6など最新のJava EE環境への移行を検討する企業が増えている。そうした企業の開発者が初めに取り組むのは、プレゼンテーション層を担うJSFであろう。初学者に向け、関連技術書もいくつか刊行されているが、欧米に比べると、まだその数は圧倒的に少ない。ただし、オンラインでは、開発者によるブログなどにおいて、JSFの学習に有用な情報が発信されている。ここでは、JSF 2の基本事項を説明したうえで、JSF 2初学者がオンラインで読むことのできる参考記事、チュートリアルなどを紹介する。

 JSFとは、Java EE 5から導入された、Webアプリケーション開発のための標準フレームワークだ。その大きな特徴は、従来のWebアプリケーション・フレームワークの多くがHTTPリクエスト/HTTPレスポンスの送受信を軸に設計されていたのに対して、画面ベースで設計されている点だ。

 また、Webページを構成する部品や機能の単位でコンポーネント化が図られており、コンポーネントを組み合わせてWebページを構成する点や、Webアプリケーション開発者とWebデザイナーが協業しやすいように配慮されている点などもポイントだと言える。

 JSFの主な特徴をまとめると、次のようになる(いくつかの特徴については詳述する)。

  • Java EEの標準Webアプリケーション・フレームワーム
  • WebアプリケーションのアーキテクチャとしてMVC(Model-View-Controller)モデルを採用
  • .NETなどと同様に、Webページの構成要素に対応するコンポーネントを組み合わせた開発(コンポーネント・ベース開発)を実現
  • WebデザイナーとWebアプリケーション開発者が独立して作業を遂行可能
  • サードパーティ製のコンポーネントを利用可能

 JSFが登場するまで、Java EEによるWebアプリケーション開発では、「フロー制御にはこのフレームワークを使い、Viewの生成にはこのフレームワーク、データベース・アクセスにはこのフレームワークを使う」といった具合に、さまざまな技術を組み合わせて必要な機能を実現していた。だが、Java EE 5以降、そうした技術がJSFを中心にJava EE仕様として標準化され、標準技術の枠内で高機能なWebアプリケーションを効率的に開発できるようになったのである。

JSF 2では、JSF 1から何がどう変わった? 「Facelets」の導入でWebアプリケーション開発の作業効率が大幅に向上

 前述したように、JSFはJava EE 5で導入された。当時のバージョンはJSF 1.2であったが、現在、国内で導入が進みつつあるJava EE 6では、それがJSF 2へとメジャー・バージョンアップされ(Java EE 6で採用されたバージョンはJSF 2.1)、使い勝手などの面が大きく改善されている。JSF 1からJSF 2へのバージョンアップにおいて、どのような点が変更されたのだろうか。

 JSF 1.2によるWebアプリケーションは、JSPを中心に構成されていた。Viewの部分にJSPを使い、Webデザイナーが用意したHTMLファイルに対して、Webアプリケーション開発者がJSPのコードを追加していくといった具合に開発を行っていたのだ。

 だが、そもそもWebページのデザインは、Webアプリケーションのライフサイクルを通じて何度も変更されるものだ。そのため、Webアプリケーション開発者はその都度、Webデザイナーが修正したHTMLファイルに対してJSPコードを追加し、修正したWebページをプレビューする際にはいったんWebページ(JSPファイル)をコンパイルする必要があるなど、作業効率が悪いという問題を抱えていた。

 JSP 2では、この問題を「Facelets」の導入によって解決している。Faceletsとは、XHTMLをベースにしたテンプレート技術であり、これによってWebデザイナーとWebアプリケーション開発者が1つのXHTMLファイルに対し、それぞれ次のような具合に互いの作業を阻害することなくWebページの作成が行えるようになっている。

  • Webデザイナーは、Webオーサリング・ツールなどを使い、(従来のHTMLと同様にして)XHTMLファイルのデザイン作業を行う。Webアプリケーション開発者が記述するJSFタグはXHTMLタグの一部として認識されるため、Webオーサリング・ツールやWebブラウザ上でデザインを崩すことなくWebページをプレビューできる
  • Webアプリケーション開発者は、統合開発環境などを使い、Webページの構成要素に対応したJSFタグをXHTMLファイルに記述する。出来上がったWebページは、JSPのように事前のコンパイルを行うことなくプレビューできる

 上記のように、JSF 2ではXHTML(Facelets)の導入により、開発者がWebページをプレビューする際の事前コンパイルが不要になった。これは些細な改善のようだが、通常、Webページの作成はプレビューと修正を何度も繰り返しながら行うので、これが不要になったことで「作業が格段に楽になった」、「ストレスが大きく減った」と感じる方は多いだろう。

 なお、JSFによるWebアプリケーション開発を担う者の役割(ロール)には、上述した「Webデザイナー(Webページのデザインを作成)」、「Webアプリケーション開発者(個々のアプリケーションのロジックを作成)」のほかに、Webページの構成要素の実装となるコンポーネントを作る「コンポーネント開発者」がある。

 JSFでは、Webページを構成する部品(コンポーネント)をコンポーネント開発者が事前に作成し、それをWebアプリケーション開発者が組み合わせて個々のWebアプリケーションを作成する。コンポーネントについては、JSFに標準で用意されたものや自作コンポーネントのほか、有償/無償で提供されるサードパーティのコンポーネント・ライブラリを使うことができる。

JSFの主なコンポーネント・ライブラリ

 このように、既存のコンポーネントを組み合わせて開発を行うという前提に立つと、JSF 2による開発では、「Webデザイナー」と「Webアプリケーション開発者」の2者が、上述したように明確に作業分担しながら主な役割を果たすことになる。

Struts 2とどう違う? JSF 2のアーキテクチャ

 JSF 2によるWebアプリケーションは、次に挙げる3つの要素から構成される。

  • Controller:Faces Servlet
  • View:XHTML(Facelets)
  • Model:Managed Bean、またはCDI(Container Dependency Injection)

 これらの要素によって実現されるWebアプリケーション処理のフローは、下図のようになる。

 ここで読者が気になるのは、これまでWebアプリケーション開発で広く使われていたStrutsとJSFが、どう違うのかということだろう。

 Strutsは、「HTTPリクエストに応じて処理を行い、その結果をHTTPレスポンスとして返す」という視点で設計されている。JSFも、基本的な動作はHTTPリクエスト/HTTPレスポンスの送受信として進むが、Webアプリケーションの開発単位として「Webページ(画面)」という視点が導入されたことが大きなポイントだ。JSFでは、個々の画面ごとにオブジェクト・ツリー(コンポーネント・ツリー)を構築し、それらのツリーが定められた手順に従ってリクエストを処理し、レスポンスとなる画面を生成する。リクエスト/レスポンス指向ではなく、画面指向の開発スタイルを採用している点が、Strutsに対するJSFの大きな特徴である。