.jsp
拡張でJSFページを作成する例、.xhtml
拡張で作成する他の例、および.jsf
を選択する例を見ました。 JSFページを操作する際の上記の拡張機能の違いと、適切な拡張機能の選択方法を知りたいだけです。
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.xml
のFacesServlet
マッピングで広く使用されている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。
.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要求処理ライフサイクルを呼び出す他の方法をサポートする場合がありますが、これらのメカニズムに依存するアプリケーションは移植できません。