在Java(Servlet)中放置应用程序范围的设置?

时间:2011-02-17 10:42:38

标签: java servlets web-config configuration-files

在ASP.NET中,web.config可以保存应用程序范围的设置。 Java EE Servlet是否有相应的文件(位于warjar存档之外)?

我需要的是指出一个配置文件的地方,该配置文件当前包含四个属性,这些属性反过来一起导致存储其余数据和配置的数据库。 (服务器,数据库,用户名和密码。)这些值需要易于更改,无需重新打包和重新部署整个应用程序,因此配置文件,但硬编码应用程序中配置文件的路径(即使它是一个常量)似乎远非最佳。

任何提示?我已经尝试了谷歌,但发现它似乎很少相关 - 而我所发现的东西看起来却因为我的需求而过度设计。

3 个答案:

答案 0 :(得分:6)

  

在ASP.NET中,有web.config可以保存应用程序范围的设置。 Java EE Servlet是否有相应的文件(驻留在war或jar存档之外)?

那是web.xml。您可以将设置定义为<context-param>条目。

<context-param>
    <param-name>foo</param-name>
    <param-value>bar</param-value>
</context-param>

ServletContext#getInitParameter()可以使用它。 ServletContext可随时随地使用。

String foo = getServletContext().getInitParameter("foo"); // Contains "bar"

您也可以通过EL访问它。

#{initParam.foo} <!-- prints "bar" -->
  

我需要的是指出一个配置文件的位置,该配置文件当前包含四个属性,这四个属性合在一起,导致存储其余数据和配置的数据库。 (服务器,数据库,用户名和密码。)这些值需要易于更改,无需重新打包和重新部署整个应用程序,因此配置文件,但硬编码应用程序中配置文件的路径(

。即使它是一个常数)似乎也不是最优的。

根据重点,我将properties文件用于此特定目的,然后将其放在WAR外部的路径中。您只需将此路径添加到Java运行时类路径即可。然后,您可以将其作为类路径资源获取:

Properties properties = new Properties();
properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("filename.properties"));
// ...

但是,由于服务于数据库连接的唯一目的,您最好使用由Qwerky回答的servletcontainer管理的数据源。您可能需要配置的只是数据源名称。

答案 1 :(得分:3)

如果这是一个Web应用程序,那么您最好将数据库连接配置为服务器上的资源,然后让您的应用程序使用JNDI检索它。您的应用服务器将提供有关如何执行此操作的文档,这是一项基本任务。

99%的严肃的网络应用程序执行此操作,另外1%应该这样做。

答案 2 :(得分:1)

只需将路径作为命令行参数传递给servlet容器启动脚本,就可以让应用程序加载任意外部文件。然后将值存储在ServletContext