我需要将哪些XHTML文件放在/ WEB-INF中,哪些不是?
在这些问题之后:
- https://stackoverflow.com/questions/8589315/jsf2-dynamic-template
- dynamicui:包含
- 我如何检索@WindowScoped上的对象?
- 如何检查存储在@WindowScoped中的对象是否正确存储?
- ICE Faces和在WindowScoped中创build一个bean的错误
我写了所有的解决JSF2框架“愚蠢”的问题,我不能直接链接到存储在/WEB-INF
子文件夹中的页面的事实。 之后,我做了一些谷歌和Stackoverflow的研究,我会知道一件事情:我如何构build一个JSF2的Web项目?
特别是,我究竟在哪里放XHTML页?
/WEB-INF
文件夹中的文件实际上并不是由最终用户公开访问的。 所以你不能有像http://localhost:8080/contextname/WEB-INF/some.xhtml
。 这将是一个潜在的安全漏洞,最终用户可以查看/WEB-INF/web.xml
等等。
但是,您可以使用/WEB-INF
文件夹来放置主模板文件,包含文件和标记文件。例如,位于/WEB-INF
之外的以下模板客户端page.xhtml
可通过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
的优点是,最终用户将无法直接通过在浏览器地址栏中input/猜测其URL来打开它们。 需要直接访问的普通页面和模板客户端不能放在/WEB-INF
文件夹中。
顺便说一句,复合组件文件反过来也不应该公开访问,但他们是通过规定需要放置在/resources
文件夹默认公开访问。 如果确保使用所提供的组件访问所有资源,以便它们永远不会被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>