JavaServer FacesJavaServer Faces (JSF) は、JavaベースのWebアプリケーションフレームワークである。Javaの拡張機能セットであるJakarta EE (旧・Java EE) の仕様の一つに採用され、名称がJakarta Server Facesに変更されている。Jakarta EE9からパッケージ名称もjavax.facesからjakarta.facesに変更された。 概要他の伝統的なリクエスト駆動型のMVC Webフレームワークと異なり、JSFはコンポーネントベースのアプローチをとっている。 UIコンポーネントの状態は、クライアントが新しいページをリクエストした際に保存され、リクエストに対するレスポンスが返されるときに復帰される。JSFは当初、画面表示技術にJavaServer Pages (JSP) を用いていたが、2.0以降はより普通のHTMLに近いFaceletsが採用されている。 JSFには下記の要素が含まれる:
JSF仕様はJava Community Processの元で、JSF 1.0および1.1を定義するJSR127として、 JSF 1.2を定義するJSR252として開発された。またJSF 2.0はJSR 314として開発されている。 JSF のバージョン
FaceletsFaceletsは、JSFのために開発されたWebテンプレートエンジンである。JSF 2.0からJSPに代わってJSFのデフォルトの画面表示技術として採用されている。Faceletsの最初のバージョンが登場したのは2005年のことで[2]、当時はJSF 1.1, 1.2をターゲットとしていた。JSFと同じコンポーネントベースのWebアプリケーションフレームワークであるApache Tapestryとは似通っており、Facelets自体もTapestryの考え方を一部取り入れている[3]。 Faceletsのテンプレートは主にXHTMLで作成される[3]。テンプレートを記述する方法としては、Facelets独自のXMLタグを直接埋め込む手法と、通常のXHTMLタグに <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html">
<body>
<h:form>
<h:outputText value="Welcome, #{loggedInUser.name}" disabled="#{empty loggedInUser}" />
<h:inputText value="#{bean.property}" />
<h:commandButton value="OK" action="#{bean.doSomething}" />
</h:form>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html">
<body>
<form jsfc="h:form">
<span jsfc="h:outputText" value="Welcome, #{loggedInUser.name}" disabled="#{empty loggedInUser}" />
<input type="text" jsfc="h:inputText" value="#{bean.property}" />
<input type="submit" jsfc="h:commandButton" value="OK" action="#{bean.doSomething}" />
</form>
</body>
</html>
他の Web GUI フレームワークとの比較Struts→詳細は「Apache Struts」を参照
StrutsはApacheソフトウェア財団が提供するMVCフレームワークである。Strutsはpage-at-a-time型のMVCフレームワークを提供し、JSFスタイルのコンポーネントモデルは備えていない。 ページは入力をアクションに接続するディスパッチサーブレット (controller) を備えたモデルにマップされる。Strutsアプリケーションはビューを表示するために主にJSPを使用するため、手近なタグライブラリの使い方に影響を受けやすい。 WebObjects / Wotonomy→詳細は「WebObjects」および「Wotonomy」を参照
WebObjectsは、よく知られた最も初期のWebアプリケーションフレームワークで、元々はNeXT Softwareによって開発された。その後Apple ComputerがNextを買収した際に獲得された。 WebObjectsはJSF 同様のコンポーネントおよびイベントモデル、ライフサイクルを備えている。 J2EEがなくても配備することができ(もともとの構成)るが、サーブレットコンテナー内に配置することもでき、その場合にはディスパッチャオブジェクトがJ2EE Webアプリケーションのエントリーポイントとして動作する。 JSF(の既定動作)とは異なり、コンポーネントはJSPファイルには定義されず、 WebObjectsは、最も初期のオブジェクト関係マッピングのフレームワーク、Enterprise Objects Frameworkを備えた、レイヤー化されたアーキテクチャを含んでいる。 Wotonomyは、WebObjectsフレームワークのオープンソースの再実装であり、クリーンルームで(訳注:プロプライエタリのコードを使用しないよう注意して)開発され、 LGPL でライセンスされている。WotonomyはWebObjectsのすべての部品を実装しようと試みており、完全なMVC web-GUIスタックを実装している。WebObjectsのクローンであり、未完成な部分を除けばJSFとの違いはWebObjectと全く同様である。 Apache Tapestry→詳細は「Apache Tapestry」を参照
Tapestryは動的で、堅固で、スケーラブルな Web アプリケーションをJavaで開発するためのオープンソースのフレームワークである。Tapestry は標準的な Java Servlet API の上に構築され、任意のサーブレットコンテナやアプリケーションサーバの上で動作する。JSFとは異なり、 TapestryはJSPを表示技術として用いない。代わりに、簡単に HTML をプレビューでき、編集できる (JSFベースのFaceletに類似した)別のテンプレートエンジンを選択している。 Microsoft ASP.NET→詳細は「ASP.NET」を参照
JSFは、Webアプリケーションの開発に、マイクロソフトのASP.NETに似たコンポーネントベースのアプローチをとっている。JSFではレンダリングとコンポーネントのインターフェイスが分離可能で出力部分をカスタマイズできるが、ASP.NET v1では、コンポーネントの出力のコードは UI コンポーネントに結合されている。ASP.NET v2は制御アダプターフレームワークを導入し、標準の出力エンジンをサードパーティーのコードで置き換えることができる。 コンポーネントから生成し、コンポーネントとは別のファイル ("code behind") に格納されるイベントを受信することでビジネスコードが UI コンポーネントに接続される。 従って、典型的な ASP.NET のページは視覚上のページレイアウト(デザイン)を記述した (HTML) ファイルと、ページのロジック(コード)を記述したファイルからなる。マイクロソフトの開発ツールによって、両方のファイルを一つの要素として扱うことができる。 書籍Core JSFの著者によれば JSFはVisual Studio 2005に似たようなRapid application development (RAD) の領域でJavaがASP.NET/Visual Studioと競争できるような手段を提供し、開発コストや開発を始める際の障壁を下げている。 JSFとAjaxJSFはリッチインターネットアプリケーション技術であるAjaxとともに言及されることが多い。Ajaxはリッチなインターユーザインタフェースの作成を可能にする技術の組み合わせである。Mojarra(JSF のリファレンス実装)とApache MyFacesにおけるユーザインタフェースコンポーネント は元々は HTML のためだけに開発されたもので、AjaxはJavaScriptを介して追加せねばならなかったが、これは変わった。 JSFは複数の出力形式をサポートしているため、JSFベースのユーザインタフェースの品質を向上させるため、Ajax を用いるコンポーネントを簡単に追加することができる。JSF 2.0 仕様では、UI ロジックの一部がサーバ側だけではなくクライアント側でも動作できるようにし、また JavaScript がブラウザで無効の場合にもうまく品質を落とせるようにすることで、Ajax のサポートを改善することを意図している。 Ajaxを用いるJSFコンポーネントとフレームワーク以下の企業やプロジェクトがAjaxに基づくJSFの実装や設計を提案している:
脚注
参考文献
関連項目外部リンク |