我需要将哪些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>