文件夹名称根据JSF specification 的第 2.6.1.1 和 2.6.1.2 章固定。
2.6.1.1 将资源打包到 Web 应用程序根目录中
默认实现必须支持在 web 应用根目录中打包资源
路径下
resources/<resourceIdentifier>
相对于网络应用根目录。必须使用 ExternalContext 上的 getResource*() 方法访问打包到 Web 应用根目录中的资源。
2.6.1.2 将资源打包到类路径中
对于默认实现,打包在类路径中的资源必须位于
JAR 条目名称:
META-INF/resources/<resourceIdentifier>
打包到classpath中的资源必须通过调用当前Thread的getContextClassLoader()方法得到的ClassLoader的getResource*()方法访问。
在这两种情况下都提到了“必须”。它没有提及任何有关更改这些路径的可能配置选项的内容。这适用于 JSF 2.0 和 JSF 2.1。
然而,在即将到来的 JSF 2.2 中,根据 JSF spec issue 996 可以通过新的 javax.faces.WEBAPP_RESOURCES_DIRECTORY 上下文参数更改路径,该参数将相对于 webcontent 根的路径作为参数值:
<context-param>
<param-name>javax.faces.WEBAPP_RESOURCES_DIRECTORY</param-name>
<param-value>WEB-INF/resources</param-value>
</context-param>
此示例会将/resources 文件夹移动到/WEB-INF,从而确保更高的安全性(即现在不再可能独立于FacesServlet 访问这些资源)。
在您的特殊情况中,您希望在升级到 JSF 2.2 时使用以下设置:
<context-param>
<param-name>javax.faces.WEBAPP_RESOURCES_DIRECTORY</param-name>
<param-value>assets</param-value>
</context-param>
请注意,这仅涵盖第 2.6.1.1 章中指定的 webapp 自己的资源,而不是第 2.6.1.2 章中指定的 JAR 资源。 JAR 资源的路径仍应为META-INF/resources,因为这是由 Servlet API 规范而非 JSF 规范控制的。即通过ServletContext#getResource() 方法获得的掩护,不受JSF 控制。