2010-11-09 37 views
1

我使用Apache公共配置库来提取我的配置列表,当我的网站开始。在哪里把Apache的公共配置文件

但它总是抛出错误找不到配置源。

我应该在哪里放置我的配置文件?

这里的web.xml:

<servlet> 
    <servlet-name>Quartz</servlet-name> 
    <servlet-class>me.myclass.Init</servlet-class> 
    <load-on-startup>1</load-on-startup>   
</servlet> 

,并在我的代码:

public void init() 
{ 
    XMLConfiguration xmlConfig; 
    try { 
     xmlConfig = new XMLConfiguration("/WEB-INF/scheduler.xml"); 
     System.out.println(xmlConfig.getString("master")); 
    } catch (org.apache.commons.configuration.ConfigurationException ex) { 
     System.out.println(ex); 
    } 
} 

回答

2

既然你是在一个servlet中,我推荐使用servlet上下文。只要你的文件是在WEB-INF它应位于与此代码:

ServletContext context = getServletContext(); 
    File schedulerFile = new File(context.getResource("/WEB-INF/scheduler.xml").getPath()); 
    xmlConfig = new XMLConfiguration(schedulerFile); 

从JavaDoc中: 的getResource:返回一个URL映射到指定路径的资源。该路径必须以“/”开头,并解释为相对于当前上下文根。

+0

是否有一个位置可以放置Servlet将使用的配置数据,以便它可以专用于运行它的环境,但不在Servlet的WAR文件中? (例如,不在web.xml或随Servlet类一起提供的/ WEB-INF /文件夹中)。我有一个需要在多个环境中运行的Servlet(例如,连接到“dev”,“test”和“production”的不同服务器,但是WAR包本身不应该从环境变为环境。) – iX3 2013-03-19 19:18:58

1

从您的代码,文件scheduler.xml应该在你的web应用程序的文件夹WEB-INF。如果你把它放在那里,并且它不能被读取,请检查它的权限。

编辑:它可能存在类路径问题。对于初学者来说,尝试把scheduler.xml在一些知名的地方,就像c:\Test\scheduler.xml一个绝对的目录,然后使用

xmlConfig = new XMLConfiguration("c:/Test/scheduler.xml"); 

只是为了检查,如果这样的作品。

+0

我已经把scheduler.xml放在WEB-INF。我使用Windows,我认为不应该有任何关于权限的担忧。我不知道如何发生这种情况。 – 2010-11-09 09:19:49