web-dev-qa-db-ja.com

JSF、サーブレット、JSPの違いは何ですか?

JSPとサーブレットはどのように関連していますか? JSPはある種のサーブレットですか? JSPとJSFはどのように関連していますか? JSFはASP.NET-MVCのようなある種のビルド済みUIベースのJSPですか?

782
Cheung

JSP(JavaServer Pages)

JSPは、サーバーマシン上で実行されるJavaビューテクノロジーです。これにより、クライアント側の言語(HTML、CSS、JavaScript、ectなど)でテンプレートテキストを記述できます。 )。 JSPは taglibs をサポートします。これは、ページフローを制御したり、動的に出力したりできるJavaコードによって支えられています。よく知られているtaglibは JSTL です。 JSPは Expression Language もサポートします。これは、主にtaglibと組み合わせて、(ページ、リクエスト、セッション、およびアプリケーションスコープで利用可能な属性を介して)バックエンドデータにアクセスするために使用できます。

JSPが初めて要求されたとき、またはWebアプリの起動時に、サーブレットコンテナは HttpServlet を拡張するクラスにコンパイルし、Webアプリの有効期間中に使用します。生成されたソースコードは、サーバーの作業ディレクトリにあります。たとえば、 Tomcat では、/workディレクトリです。 JSPリクエストで、サーブレットコンテナはコンパイルされたJSPクラスを実行し、生成された出力(通常はHTML/CSS/JSのみ)をWebサーバー経由でネットワーク経由でクライアント側に送信し、クライアント側はそれをWebブラウザーに表示します。

サーブレット

サーブレットは、サーバーマシン上で実行されるJavaアプリケーションプログラミングインターフェース(API)であり、クライアントによるリクエストをインターセプトし、応答を生成/送信します。よく知られた例は、HttpServletGETなどの一般的な HTTPメソッド を使用して HTTP 要求をフックするメソッドを提供するPOSTです。特定のHTTP URLパターンをリッスンするようにHttpServletsを設定できます。これは、web.xmlで、または最近では Java EE 6 で、@WebServletアノテーションで設定可能です。

サーブレットが最初に要求されたとき、またはWebアプリの起動中に、サーブレットコンテナはそのインスタンスを作成し、Webアプリの有効期間中メモリに保持します。 URLがサーブレットのURLパターンと一致するすべての着信要求に対して、同じインスタンスが再利用されます。 HttpServletRequest で要求データにアクセスし、 HttpServletResponse で応答を処理できます。両方のオブジェクトは、doGet()doPost()など、HttpServletのオーバーライドされたメソッド内のメソッド引数として使用できます。

JSF(JavaServer Faces)

JSFはコンポーネントベースのMVCフレームワークであり、サーブレットAPIの上に構築され、使用可能なtaglibsを介して components を提供しますJSPまたはその他のJavaベースのビューテクノロジー( Facelets など)。 FaceletsはJSPよりもJSFにはるかに適しています。つまり、優れた テンプレート機能 を提供します。たとえば、 複合コンポーネント です。一方、JSPは基本的に、JSFでのテンプレート用に <jsp:include> のみを提供するため、生のJavaコード(少し不透明で面倒な作業)でカスタムコンポーネントを作成するには、コンポーネントの繰り返しグループを単一のコンポーネントに置き換えます。 JSF 2.0以降、JSPはFaceletsを支持するビューテクノロジーとして非推奨になりました。

:JSP自体は非推奨ではなく、JSFとJSPの組み合わせのみが非推奨です。

:JSPは、Taglibs、特に( Tag File )バリアントによる優れたテンプレート機能を備えています。 JSPテンプレートとJSFの組み合わせは欠けています。

MVC( Model-View-Controller )フレームワークであるため、JSFは FacesServlet を唯一の要求/応答として提供しますController 。ユーザー入力の収集、検証/変換、モデルオブジェクトへの配置、アクションの呼び出し、応答のレンダリングなど、すべての標準的で退屈なHTTP要求/応答作業を手から取ります。この方法では、基本的にViewのJSPまたはFacelets(XHTML)ページとModelのJavaBeanクラスになります。 JSFコンポーネントを使用してビューをモデルにバインドし(ASP.NET Webコントロールなど)、FacesServletJSFコンポーネントツリーを使用してすべての作業を実行します。

関連する質問

1183
BalusC

http://www.Oracle.com/technetwork/Java/faq-137059.html を参照してください。

JSPテクノロジは、Javaテクノロジファミリの一部です。 JSPページはサーブレットにコンパイルされ、サーバー上で処理を実行するためにJavaBeansコンポーネント(Bean)またはEnterprise JavaBeansコンポーネント(Enterprise Bean)を呼び出すことができます。そのため、JSPテクノロジは、Webベースのアプリケーション用の高度にスケーラブルなアーキテクチャの重要なコンポーネントです。

https://jcp.org/en/introduction/faq を参照してください。

A:JavaServer Facesテクノロジは、Webアプリケーション用のユーザーインタフェースを構築するためのフレームワークです。 JavaServer Facesテクノロジには以下が含まれます。

UIコンポーネントの表現とその状態の管理、イベントと入力検証の処理、ページナビゲーションの定義、および国際化とアクセシビリティのサポートのための一連のAPI。

JSPページ内でJavaServer Facesインタフェースを表現するためのJavaServer Pages(JSP)カスタムタグライブラリ。

JSPは特殊な種類のサーブレットです。

JSFはJSPで使用できるタグのセットです。

77
S.Lott

ブラウザ/クライアントの観点から

JSPとJSFはどちらも同じように見えます。アプリケーション要件に従って、JSPは要求 - 応答ベースのアプリケーションに適しています。

JSFは、より豊富なイベントベースのWebアプリケーションを対象としています。イベントはリクエスト/レスポンスよりもはるかにきめ細かいです。

サーバーの観点から

JSPページはサーブレットに変換され、最小限の動作しかありません。

JSFページは(特殊なFacesServletによって)コンポーネントツリーに変換され、それはspecによって定義されたコンポーネントライフサイクルに従います。

31
Vh24

サーブレット:

JavaサーブレットAPIを使用すると、Java開発者は動的Webコンテンツを配信するためのサーバーサイドコードを作成できます。他の専用WebサーバーAPIと同様に、JavaサーブレットAPIはCGIよりもパフォーマンスが向上しています。ただし、それにはいくつかの重要な追加の利点があります。サーブレットはJavaでコーディングされているため、オブジェクト指向(OO)設計アプローチを提供し、さらに重要なことには、どのプラットフォームでも実行できます。したがって、同じコードが、Javaをサポートするすべてのホストに移植可能でした。サーブレットは、サーバーサイドのWebアプリケーション開発に広く使用されるテクノロジになったため、Javaの人気に大きく貢献しました。

JSP:

JSPはサーブレットの上に構築されており、Webユーザーインタフェース用に大量の動的HTMLコンテンツを生成するための、より単純なページベースのソリューションを提供します。 JavaServer Pagesを使用すると、Web開発者および設計者は動的なJava部分用の特別なタグを使用してHTMLページを簡単に編集できます。 JavaServer Pagesは、JSPコンテナと呼ばれる特別なサーブレットを持つことによって機能します。このコンテナはWebサーバにインストールされ、すべてのJSPページビュー要求を処理します。 JSPコンテナは、要求されたJSPをサーブレットコードに変換し、それがコンパイルされてすぐに実行されます。同じページに対する後続の要求は、単にそのページのランタイムサーブレットを呼び出すだけです。サーバー上のJSPに変更が加えられた場合は、それを表示するように要求すると、別の変換、コンパイル、およびランタイムサーブレットの再起動がトリガーされます。

JSF:

JavaServer Facesは、Webアプリケーション用のユーザーインタフェースを構築するための標準Javaフレームワークです。最も重要なことは、Webアプリケーション開発の中でも最も困難で退屈な部分の1つであることが多いユーザーインターフェースの開発を単純化することです。
エンタープライズWebアプリケーション開発のために設計された包括的なフレームワークなしで基本的なJava Web技術(JavaサーブレットおよびJavaServer Pagesなど)を使用することによってユーザーインターフェースを構築することは可能であるが、これらのコア技術はしばしば莫大な開発および保守につながり得る。問題があります。さらに重要なのは、開発者が本番品質のソリューションを達成するまでに、JSFによって解決される同じ一連の問題が非標準的な方法で解決されることです。 JavaServer Facesは、次のようにしてJava Webアプリケーション用のユーザーインタフェースの開発を簡素化するように設計されています。
•Webユーザーインターフェイスを構築するための、コンポーネント中心の、クライアントに依存しない開発アプローチを提供します。これにより、開発者の生産性と使いやすさが向上します。
•Webユーザーインターフェースからアプリケーションデータへのアクセスと管理を簡素化します。
•複数のリクエストと複数のクライアント間のユーザーインターフェイスの状態を簡単で目立たない方法で自動的に管理します。
•さまざまなスキルセットを持つ多様な開発者オーディエンスに優しい開発フレームワークを提供します。
•Webアプリケーションの標準的な一連のアーキテクチャパターンについて説明しています。

[出典: 完全な参照:JSF]

21
Kishor Prakash

JSFよりもJSPを優先できる場合もあります。アプリケーションの性質は、テクノロジを選択するための決定的な要素になります。

もしあなたがリッチなGUIインタラクションとたくさんのJavaスクリプトを必要としているのなら、JSFを好むでしょう。基本的にあなたのGUIアプリのアーキテクチャがコンポーネント指向でSwingのように動いているのであればJSFが一番です。

アプリケーションが単なるプレーンフォームの送信であり、GUIの操作はそれほど必要ではない場合、新しい技術の習得がオーバーヘッドで複雑なフレームワークも不要であれば、JSPでうまくいく可能性があります。

15
Karthi

サーブレット - それはJavaサーバー側の層です。

  • JSP - サーブレットとhtml
  • JSF - タグライブラリに基づくコンポーネントベース
  • JSP - サーバーがリクエストを受け取ったときにサーブレットに変換されます。
12
cackle

これは、実行時にJSPがサーブレットに変換されることと、JSFがすべてのプログラミング構造をタグの形式で記述することを可能にするため、Webページを読みやすくするためのまったく新しいことです。

10
mahesh

サーブレットとJSPの基本的な違いは、サーブレットではJavaコードを書くことと、HTMLコードを埋め込むことであり、JSPでは逆の場合があります。 JSPでは、HTMLコードを記述し、JSPで提供されるタグを使用してJavaコードを埋め込みます。

5
user3608245

Java Server Pages(JSP) は、Web開発者および設計者が既存のビジネスシステムを活用する情報豊富で動的なWebページを迅速に開発し、簡単に管理できるようにするJavaテクノロジです。 JSPテクノロジは、ユーザーインタフェースとコンテンツ生成を分離しているため、設計者は基礎となる動的コンテンツを変更することなくページレイアウト全体を変更できます。

Facelets JSF(Java Server Faces) 用に設計された最初の非JSPページ宣言言語であり、JSPと比較してJSF開発者にとってより単純で強力なプログラミングモデルを提供します。 Webアプリケーション開発用のJSPで発生するさまざまな問題を解決します。

これは、スクリプトレットとファセットの機能を比較した表です。

enter image description here 出典

5
Yster
JSP:means HTML+Java Code:

JSPには独自のライフサイクルがあります。jsp_init()jsp_service()jsp_destroy

最初にJSPを要求した後、.Javaファイルに変換します。使用しているタグは3種類あります
1.)スクリプトレス

<%  %>

ここで開発者は、開発者がデータを取得したいすべてのものを宣言することができます。

2.)式タグ

<%=  %>

ここで開発者はいくつかの印刷関連データを使用することができます

3.)宣言

<!% %>

ここで開発者はいくつかのメソッド関連データを宣言することができます。

Servlet:

サーブレットには独自のライフサイクルがあります。

init()
service()
destroy()

最初のリクエストコンテナはweb.xmlファイルからデータを読み込み、その後ウェルカムフィルが表示されます。
これ以降、アクションを実行した後にURLを検索し、このプロセスの後に特定のサーブレットを検索します。サービス操作が実行されます。

JSF:

JSFには独自のUIがあり、ライフサイクルは6つの方法で実行できます。

A)Restore view phase
B)Apply request values phase
C)Process validations phase
D)Update model values phase
E)Invoke application phase
F)Render response phase

ここのテーブルのためにここにuiのために私達はパネルグリッドを使用していますそしてこれのためにこれは別の面があります。

Rich Faces
Prime Faces.
0
Ankit