JSFを学習しようとしましたが、URLが*.jsf
そして時々*.xhtml
または/faces/*
。誰かが私の知識を満たしてくれますか? Faceletを使用してJSFを作成すると、ファイル拡張子は.xhtml
ので、.jsf
URL拡張機能の由来は?
.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.xml
のpage.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にバックポートされています。