web-dev-qa-db-ja.com

JSF URLが* .jsfであることがあります。*。xhtmlおよび/ faces / *です。どうして?

JSFを学習しようとしましたが、URLが*.jsfそして時々*.xhtmlまたは/faces/*。誰かが私の知識を満たしてくれますか? Faceletを使用してJSFを作成すると、ファイル拡張子は.xhtmlので、.jsf URL拡張機能の由来は?

56
Thang Pham

.jsf拡張は、web.xmlでマップされることが多いJSF 1.2期間中のFacesServletの場所です。

<servlet-mapping>
    <servlet-name>facesServlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

.xhtml拡張子は、WebアプリケーションのWebコンテンツに物理的に配置したactualFaceletsファイルです。 Webapp/WebContent/page.xhtml

.jsf拡張子でこのページを呼び出した場合、たとえばhttp://localhost:8080/webapp/page.jsfその後FacesServletが呼び出され、page.xhtmlファイルを見つけて、JSFコンポーネントを解析/レンダリングします。 FacesServletが呼び出されない場合、エンドユーザーは未加工のXHTMLソースコードを取得することになります(右クリックで表示できますView Source)。

*.faces拡張機能または/faces/*フォルダーマッピングが使用される場合があります。しかし、これはJSF 1.0/1.1時代に遡ります。何も言わない*.xyzであっても、FacesServletをリッスンさせるために、好きなマッピングを自由に選択して使用できます。実際のページ自体は常に.xhtml拡張子を持つ必要がありますが、これは<context-param>の次のweb.xmlで構成可能です。

<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xml</param-value>
</context-param>

これにより、FacesServletが変更され、(デフォルト)page.xmlpage.xhtml instadが検索されます。

最近では、JSF/Facelets 2.0で*.xhtmlマッピングが使用されています。 JSF/Facelets 1.xでは、物理ファイルと同じマッピング拡張を使用することはできませんでした。無限ループになります。しかし、JSF/Facelets 2.0以降は可能であり、これによりhttp://localhost:8080/webapp/page.xhtmlでページを呼び出すことができます。

<servlet-mapping>
    <servlet-name>facesServlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

このように、エンドユーザーがURLの.jsfをブラウザーのアドレスバーの.xhtmlなどに変更するたびに、未加工のソースファイルを隠すためのセキュリティ制限を設定する必要はありません。 *.jsfから*.xhtmlへの提唱された動きに追いつく必要があるのは、ツール(IDEとプラグイン)と学習リソースのみです。 JSF 2.3により、FacesServletはデフォルトで*.xhtmlにも自動登録されます(/faces/**.faces*.jsfの隣)。これはMojarra 2.2.11にバックポートされています。

こちらもご覧ください:

98
BalusC