58

JSF を学習しようとしていて、URL が*.jsfである場合と である場合があり*.xhtmlます/faces/*。誰かが私の知識を埋めてくれませんか? Facelet を使用して JSF を作成すると、ファイル拡張子は.xhtmlになりますが、.jsfURL 拡張子はどこから来るのでしょうか?

4

1 に答える 1

102

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

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

.xhtml拡張子は、webapp の webcontent に物理的に配置した実際のFacelets ファイルです(例: Webapp/WebContent/page.xhtml.

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

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

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

これにより、が (デフォルト) の代わりFacesServletに locate に変更されます。page.xmlpage.xhtml

最近では、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>

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

以下も参照してください。

于 2010-06-09T18:01:39.150 に答える