我正在编写一个由Tomcat 6托管的JSF 2.1 Web应用程序。
在运行时,我想检索一组与外部服务相关的复杂参数。
在开发时,我不知道这些参数是什么,或者有什么可能。
参数将由我们的操作人员设置,因此必须在.war文件之外定义。
我认为context.xml会有所帮助(即TOMCAT_HOME/conf/Catalina/localhost/MyWebApp.xml
),但这只能接受标量参数,似乎没有任何方法可以迭代它们。
以下是我想在运行时访问的示例。
<services>
<service id="bbc" name="BBC Weather" url="http://www.bbc.co.uk/weather/" />
<service id="underground" name="Weather Underground" url="http://www.wunderground.com/weather/api/">
<login username="test" password="test" />
</service>
<service id="network" name="The Weather Network" url="http://www.theweathernetwork.com/">
<method type="post" />
</service>
</services>
我是否可以通过编程方式获得对TOMCAT_HOME/conf/Catalina/localhost/MyWebApp.xml
的访问权限?我知道how to get the path to TOMCAT_HOME,但我们的运营人员可能会选择更改Tomcat主机或引擎名称。
作为一种解决方法,我总是可以将一个参数写入context.xml,如下所示。
<Parameter name="config.file" value="C:/Program Files/Apache Software Foundation/Tomcat 6.0/conf/Catalina/localhost/MyConfigFile.xml" />
但这也是一个额外的错误点,需要维护安装说明中的额外步骤等。
我确信必须有一个简单的方法来做到这一点,我错过了什么?
提前谢谢,亚当。
答案 0 :(得分:2)
创建您自己的XML文件并将其放在Tomcat的默认运行时类路径(如Tomcat/lib
)所涵盖的现有路径之一中,或者通过在shared.loader
属性中指定它来将其路径添加到运行时类路径中。 Tomcat的/conf/catalina.properties
。
一旦它在类路径中,你就可以通过类加载器获得它。
ClassLoader loader = Thread.currentThread().getContextClassLoader();
InputStream input = loader.getResourceAsStream("services.xml");
// ...