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

时间:2012-01-27 10:21:16

标签: jsf jsf-2 facelets web-inf

在这些问题之后:

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

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

1 个答案:

答案 0 :(得分:119)

最终用户确实无法公开/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文件夹中,默认情况下可以公开访问。{1}}文件夹。如果您确保使用therefor provided components访问所有资源,那么网址中的/resources永远不会访问它们(而是/javax.faces.resource),那么您可以将以下约束添加到{ {1}}阻止对web.xml文件夹的所有公共访问:

/resources