在这些问题之后:
我写了所有内容来解决JSF2框架的“愚蠢”问题,我无法直接链接到存储在/WEB-INF
子文件夹中的页面。之后我做了一些关于Google和Stackoverflow的研究我会知道一件事:我如何构建一个JSF2 Web项目?
特别是,我在哪里放置XHTML页面?
答案 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