これらの質問の後:
jSF2フレームワークの「愚かな」問題を解決するために私がすべて書いたこと、つまり/WEB-INF
サブフォルダー。その後、GoogleとStackoverflowについていくつかの調査を行いました。知っていることは、JSF2 Webプロジェクトをどのように構築すればよいのでしょうか?
特に、XHTMLページはどこに正確に配置しますか?
/WEB-INF
フォルダー内のファイルは、エンドユーザーが実際に公開することはできません。したがって、http://localhost:8080/contextname/WEB-INF/some.xhtml
のようなものを持つことはできません。これは、エンドユーザーが/WEB-INF/web.xml
などを表示できるため、潜在的なセキュリティホールになります。
ただし、/WEB-INF
フォルダーを使用して、マスターテンプレートファイル、インクルードファイル、タグファイルを配置できます。たとえば、次のテンプレートクライアントpage.xhtml
は、/WEB-INF
の外部にあり、http://localhost:8080/contextname/page.xhtml
からアクセスできます。
<ui:composition template="/WEB-INF/templates/template.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://Java.Sun.com/jsf/core"
xmlns:h="http://Java.Sun.com/jsf/html"
xmlns:ui="http://Java.Sun.com/jsf/facelets"
>
<ui:define name="content">
...
<ui:include src="/WEB-INF/includes/include.xhtml" />
...
</ui:define>
</ui:composition>
マスターテンプレートとインクルードファイルを/WEB-INF
に配置する利点は、エンドユーザーがブラウザーのアドレスバーにURLを入力/推測して直接開くことができないことです。直接アクセスすることを目的とする通常のページおよびテンプレートクライアントは、/WEB-INF
フォルダーに配置しないでください。
ちなみに、複合コンポーネントファイルは、一般にアクセス可能であることも想定されていませんが、仕様により、/resources
フォルダーに配置する必要があります。 therefor provided components を使用してすべてのリソースにアクセスし、URLで/resources
によってアクセスされることなく(代わりに/javax.faces.resource
によって)アクセスされるようにする場合は、次の制約をweb.xml
に追加してすべてをブロックできます/resources
フォルダーへのパブリックアクセス:
<security-constraint>
<display-name>Restrict direct access to the /resources folder.</display-name>
<web-resource-collection>
<web-resource-name>The /resources folder.</web-resource-name>
<url-pattern>/resources/*</url-pattern>
</web-resource-collection>
<auth-constraint />
</security-constraint>