【发布时间】:2012-05-15 04:39:27
【问题描述】:
我知道有一个配置文件叫web.xml 我想要实现的是拥有另一个具有应用程序特定配置的配置文件,并且必须在启动 Web 服务器时读取它。我还希望一个类能够读取此配置。有没有办法我可以配置这是 web.xml 文件本身还是有另一种方式
【问题讨论】:
标签: java servlets configuration web web.xml
我知道有一个配置文件叫web.xml 我想要实现的是拥有另一个具有应用程序特定配置的配置文件,并且必须在启动 Web 服务器时读取它。我还希望一个类能够读取此配置。有没有办法我可以配置这是 web.xml 文件本身还是有另一种方式
【问题讨论】:
标签: java servlets configuration web web.xml
您可以使用 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。该类将简单地通过静态方法提供对配置的访问。
【讨论】: