如何在eclipse动态Web项目中读取配置文件?

时间:2012-05-06 08:04:43

标签: java servlets configuration web web.xml

我知道有一个名为web.xml的配置文件 我想要实现的是另一个具有应用程序特定配置的配置文件,并且必须在启动Web服务器时读取它。我还希望Class能够读取此配置。有没有办法可以配置这个是web.xml文件本身还是有另一种方式

1 个答案:

答案 0 :(得分:1)

您可以使用Apache Commons配置。看看user guide。由于您希望在启动时完成,因此这是一个示例ServletContextListener:

package test;

import java.io.File;
import java.net.MalformedURLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.XMLConfiguration;

public class ConfigurationListener implements ServletContextListener {

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ServletContext context = sce.getServletContext();
        File configFile;

        try {
            configFile = new File(context.getResource("/WEB-INF/configuration.xml").getPath());
            Configuration config = new XMLConfiguration(configFile);
            context.setAttribute("configuration", config);
        } catch (ConfigurationException | MalformedURLException ex) {
            Logger.getLogger(ConfigurationListener.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {}
}

现在可以在Web应用程序中的任何位置进行配置,如下所示:

Configuration config = (Configuration) request.getServletContext().getAttribute("configuration");

我会创建一个类来保存配置,而不是将它作为属性添加到ServletContext中。该类只是通过静态方法提供对配置的访问。