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 之外的配置文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 JSF 的 /WEB-INF 文件夹中获取属性文件?