web-dev-qa-db-ja.com

どのXHTMLファイルを/ WEB-INFに配置する必要がありますか?

これらの質問の後:

jSF2フレームワークの「愚かな」問題を解決するために私がすべて書いたこと、つまり/WEB-INFサブフォルダー。その後、GoogleとStackoverflowについていくつかの調査を行いました。知っていることは、JSF2 Webプロジェクトをどのように構築すればよいのでしょうか?

特に、XHTMLページはどこに正確に配置しますか?

56
Filippo1980

/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> 
119
BalusC