web-dev-qa-db-ja.com

Java EE 6:JSF vsサーブレット+ JSP。わざわざJSFを学ぶ必要がありますか?

私はJava EE 6を読んで http://Java.Sun.com/javaee/6/docs/tutorial/doc/gexaf.html に慣れようとしています=。JSFの使用について少し混乱しています。
通常、私のWebアプリの開発方法は、サーブレットはコントローラーのように動作し、JSPはMVCモデルのビューのように動作します。 JSFはこの構造を置き換えようとしていますか?以下は上記のチュートリアルからの引用です:

サーブレットはサービス指向のアプリに最適で、リクエストをディスパッチするようなプレゼンテーション指向のアプリの制御機能です。
JSFとFaceletは、XHTMLのようなマークアップを生成するためにより適切であり、一般にプレゼンテーション指向のアプリに使用されます

上記の引用をよく理解しているかどうかはわかりませんが、サービス指向とプレゼンテーション指向の違いをよく理解していませんでした。

JavaServer Facesアプリケーションは、HTTP要求をコンポーネント固有のイベント処理にマップし、コンポーネントをサーバー上のステートフルオブジェクトとして管理できます。

知識のある人Java開発者がJSF、JSP、サーブレットについて簡単に概要を説明できますか?それらすべてを統合しますか、それともアプリ上でそれらを分離して使用しますか?そうであればどのような種類ですか?のアプリケーションは、サーブレットやJSPとは対照的にJSFを使用します

JavaServer Facesアプリケーションは、HTTP要求をコンポーネント固有のイベント処理にマップし、コンポーネントをサーバー上のステートフルオブジェクトとして管理できます。

サーブレットができることのように聞こえますが、manage components as stateful objects on the server。それがどういう意味かわからない?前もって感謝します。

33
Thang Pham

JSFを使用すると、基本的に、モデルオブジェクト(JavaBeans)とビュー(JSP/XHTMLページ)のみでWebアプリケーションを開発できます。 「プレーンバニラ」JSP /サーブレットでは、HTTP要求と応答を制御、前処理、後処理、データ収集、検証、変換、リッスンなどするために、多くのコードを組み込む必要があります。そして、私はそれを高い(抽象的な)程度にリファクタリングすることについて話していないので、JSFと同じ方法で終了することもできます(ユースケースごとにJavaBeanクラスとJSP/XHTMLページのみ)。

私はここでこの件についてより詳細な回答を投稿しました: JSF、サーブレット、JSPの違いは何ですか?

31
BalusC

JSFでは、1つの特定のサーブレット(Facesサーブレット)を使用して、すべての着信要求を処理し、それらを適切なBeanにディスパッチします。

JSFはコンポーネントベースのMVCフレームワークであり、JSPはビューテクノロジーです。
あなたcan JSFでJSPを使用しますが、Faceletsが推奨されるビュー技術です。

10
Bozho

JSFは抽象化レイヤーにいくつかの責任を提供しますが、最も重要なことは、HTMLフォームのすべての厄介な詳細を処理し、WebページとJava POJO Bean(getX、setXメソッド))の間でデータをやり取りすることです。これは正しく行うのが難しいことで有名です。

また、ナビゲーションを提供し、Java EE 6初歩的なAJAXのサポートにより、ユーザーがデータを入力するときにWebページを簡単に更新できます。

JavaScriptを自分で作成することを避ける方法として考える方が簡単な場合があります。

XMLが好きな場合はJSFを選択してください。あなたがアクションリスナーのファンである場合、doPost、doGetなどはサーブレットとJSPを選択します。

3
Chris

JSFフレームワークは、Webベースのユーザーインターフェイスの開発統合を簡素化することを目的としています。 @bozhoが述べたように、JSPとJSFを混在させることができます。ただし、JSFの「ビュー」コンポーネントはfaceletです。これは、小さなHTMLウィジェットとして表示できます。これは、DHTMLスタイリングとJavaScriptイベントの生成およびコールバックに関してほぼ自己完結型です。

「私はわざわざ学習する必要がありますか……?」

わからない。過去5年間、JSFが(理論的には少なくとも)あっても、それほど多くのSteamを拾うのを見たことがありません。

2
ring bearer