web-dev-qa-db-ja.com

.jspまたは.xhtmlまたは.jsf拡張子を持つJSFページの作成の違いは何ですか

.jsp拡張でJSFページを作成する例、.xhtml拡張で作成する他の例、および.jsfを選択する例を見ました。 JSFページを操作する際の上記の拡張機能の違いと、適切な拡張機能の選択方法を知りたいだけです。

52
fresh_dev

JSPは古いビューテクノロジーであり、JSF 1.xと組み合わせて広く使用されています。 Facelets(一部の人々は [〜#〜] xhtml [〜#〜] として一般化されています)は、JSPの後継であり、2009年末にJSF 2.xのデフォルトビューテクノロジーとして導入されました。 JSPを見ていると、JSF 1.xを対象とした古い本、チュートリアル、またはリソースを読んでいた可能性があります。一般に、JSF 2.xで開発する場合はそれらを無視し、JSF 2.xをターゲットとするリソースに向かう必要があります。そうしないと、FaceletsのJSF 2.xで多くのことが異なるため混乱する可能性があります.

*.jsfは、web.xmlFacesServletマッピングで広く使用されているURLパターンの1つにすぎません。他のものは*.faces/faces/*ですが、これらはJSF 1.0/1.1時代のものです。それらはすべて、具体的なファイル拡張子/パスではなく、単なる仮想ファイル拡張子/パスを表しており、そのようにのみURLで指定されます http://example.com/contextname/page.jsf 。基本的な Servlets に精通している場合、リクエストURLがサーブレットのURLパターンと一致すると、servletcontainerがサーブレットを呼び出すことを知っておく必要があります。したがって、リクエストURLが*.jsfと一致すると、FacesServletがこの方法で呼び出されます。 JSPを使用すると、実際にはpage.jspが実行されます。 Faceletsを使用する場合、これは実際にpage.xhtmlをコンパイルします。

JSF 2.x以降では、*.xhtmlをURLパターンとして使用することもできます。この方法により、URLを指定するときに混乱する必要がなくなります。 Facelets 1.xを使用するJSF 1.xでは、*.xhtmlをURLパターンとして使用することはできませんでした。これは、FacesServletが毎回それ自体を呼び出す無限ループで実行されるためです。 *.xhtmlを使用するもう1つの利点は、エンドユーザーがブラウザーのアドレスバーのURL拡張子をたとえば.jsfから.xhtmlに意図的に変更した場合、エンドユーザーが生のJSFソースコードを表示できないことです。 *.jspをURLパターンとして使用することはできません。この方法では、既にそのURLパターンを使用しているコンテナの組み込みJspServletがオーバーライドされ、FacesServletがフィードできなくなるためです。もうJSP。

こちらもご覧ください:

61
BalusC

.jspファイルは通常、JavaServer Pagesを使用して定義されたJSFビューに使用されます。 .xhtmlファイルは通常、Faceletsを使用して定義されたJSFビューに使用されます。

これは、構成を介して変更できます(例:javax.faces.DEFAULT_SUFFIXおよびjavax.faces.FACELETS_SUFFIX構成パラメーターを参照してください)。

他の拡張マッピング(*.jsf*.faces)は、FacesServletを介したリクエストの処理に使用される傾向があります。これは、JSFランタイムが処理するビューへの論理マッピングです。マッピングの処理方法は、web.xmlで定義されています(拡張機能を使用する必要はありません。/faces/*マッピングがよく使用されます。

仕様から:

サーブレットマッピング

Webアプリケーションへのすべてのリクエストは、URLパターン(Javaサーブレット仕様で定義されている)と、これを選択したコンテキストパスの後のリクエストURLの部分との一致)に基づいて特定のサーブレットにマッピングされますWebアプリケーション:JSF実装は、有効なURLパターンをFacesServletにマッピングする<servlet-mapping>を定義するWebアプリケーションをサポートする必要があります。プレフィックスまたはエクステンションマッピングを使用できます。 :

<servlet-mapping>
<servlet-name> faces-servlet-name </servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>

拡張マッピングを使用する場合、次のマッピングが推奨されますが、必須ではありません。

<servlet-mapping>
<servlet-name> faces-servlet-name </servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>

FacesServletに加えて、JSF実装はJavaServer Faces要求処理ライフサイクルを呼び出す他の方法をサポートする場合がありますが、これらのメカニズムに依存するアプリケーションは移植できません。

14
McDowell