JSF を学習しようとしていて、URL が*.jsf
である場合と である場合があり*.xhtml
ます/faces/*
。誰かが私の知識を埋めてくれませんか? Facelet を使用して JSF を作成すると、ファイル拡張子は.xhtml
になりますが、.jsf
URL 拡張子はどこから来るのでしょうか?
1 に答える
.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.xml
page.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
以下も参照してください。
- web.xml の URL パターンで正規表現を使用できますか?
- JSF プロジェクトで <welcome-file> を介してデフォルトのホームページを設定する
- JSF は、レンダリングされた HTML 出力ではなく、プレーン/生の XHTML/XML/EL ソースを含む空白/解析されていないページを返します
- .jsp または .xhtml または .jsf 拡張子を持つ JSF ページの作成の違いは何ですか
- /WEB-INF に入れる必要がある XHTML ファイルと入れないのはどれですか?
- FacesServlet <url-pattern> をカスタマイズして .xhtml 拡張子を取り除く