JSF 面对 WEB-INF 之外的配置文件?

Posted

技术标签:

【中文标题】JSF 面对 WEB-INF 之外的配置文件?【英文标题】:JSF faces config file outside WEB-INF? 【发布时间】:2010-11-24 19:55:19 【问题描述】:

创建多个faces配置文件时,将faces-config.xml放在WEB-INF之外是否正确? JSF 规范对此似乎不是很清楚(第 10.1.3 节)

如果是,这个 faces-config.xml 应该如何在 web.xml 中声明? IDE(如 Eclipse/JDev)生成的路径通常使用如下内容:

<context-param>
    <param-name>javax.faces.CONFIG_FILES</param-name>
    <param-value>/WEB-INF/faces-config1.xml</param-value>
</context-param>

现在,如果我的 faces-config.xml 在 WEB-INF 之外 - 将 param-value 声明为“/WebContent/WEB-INF/faces-config2.xml”之类的内容是否正确?

【问题讨论】:

【参考方案1】:

正如大卫的回答中提到的,不建议将配置文件放在 WEB-INF 目录之外。但是,如果您正在寻找组织项目的方法,您可以尝试在 WEB-INF 下创建一个新的子目录。

例如,当我处理大量 faces-config 文件时,我将创建一个目录 /WEB-INF/config 并将 faces-config 文件放在其中。

【讨论】:

【参考方案2】:

如果您从 web.xml 引用它们,则该文件需要在运行时处于战争中。容器可以通过其他方式发现 faces-config.xml 资源。

10.4.2 在应用程序启动时,在处理任何请求之前,JSF 实现必须 处理零个或多个应用程序配置资源,按以下方式定位 算法:

搜索所有名为“META-INF/faces-config.xml”的资源 此 Web 应用程序的 ServletContext 资源路径,并将每个资源路径加载为 JSF 配置资源(与它们返回的顺序相反 getResources() 在当前线程的 ContextClassLoader 上)。

检查是否存在名为的上下文初始化参数 javax.faces.CONFIG_FILES。如果存在,则将其视为逗号分隔的列表 上下文相关资源路径(以“/”开头),并加载每个指定的 资源。

检查是否存在名为“/WEBINF/”的 Web 应用程序配置资源 faces-config.xml”,如果资源存在就加载它。

【讨论】:

【参考方案3】:

可以,但不推荐。将配置文件放在 WEB-INF 下的原因是服务器知道不提供这些文件 - 你有你的代码、数据库配置和其他敏感的东西。

您不能使用“/WebContent/WEB-INF/faces-config2.xml” - AFAIK“WebContent”是 Eclipse 特定的。使配置文件名称在 WAR 中是绝对的。这意味着它们将始终以“/WEB-INF/”开头。

【讨论】:

以上是关于JSF 面对 WEB-INF 之外的配置文件?的主要内容,如果未能解决你的问题,请参考以下文章

WEB-INF 目录中的 JSF 文件,我如何访问它们?

如何从 JSF 的 /WEB-INF 文件夹中获取属性文件?

spring-自动加载配置文件使用属性文件注入

JSF 2.2.10 文件上传不起作用[重复]

如何在myeclipse中部署jsf的primefaces框架,文档中说直接拷到lib目录下,但是没成功。

spring security 使用hibernate和jsf认证不同的配置文件和权限