我需要将哪些XHTML文件放入/ WEB-INF中,哪些不是?

Fil*_*980 57 jsf facelets web-inf jsf-2

在这些问题之后:

我写了所有来解决JSF2框架的"愚蠢"问题,我无法直接链接到存储在/WEB-INF子文件夹中的页面.之后我做了一些关于Google和Stackoverflow的研究我会知道一件事:我如何构建一个JSF2 Web项目?

特别是,我在哪里放置XHTML页面?

Bal*_*usC 121

/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>
Run Code Online (Sandbox Code Playgroud)

放置主模板和包含文件的优点/WEB-INF是,最终用户无法通过在浏览器地址栏中输入/猜测其URL来直接打开它们.有意直接访问的普通页面和模板客户端不能放在/WEB-INF文件夹中.

顺便说一下,复合组件文件反过来也不应该是可公开访问的,但是它们需要被放置在/resources默认情况下可公开访问的文件夹中.如果您确保使用其提供的组件访问所有资源,以便它们永远不会被/resourcesURL(而是通过/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> 
Run Code Online (Sandbox Code Playgroud)