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

a C*_*CVn 2 java servlets web-config configuration-files

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

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

任何提示?我已经尝试了谷歌,但发现它似乎很少相关 - 而我所发现的东西看起来似乎过于设计,以满足我的需求.

Bal*_*usC 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>
Run Code Online (Sandbox Code Playgroud)

它是可用的ServletContext#getInitParameter().随后ServletContext可以在任何地方使用.

String foo = getServletContext().getInitParameter("foo"); // Contains "bar"
Run Code Online (Sandbox Code Playgroud)

您也可以通过EL访问它.

#{initParam.foo} <!-- prints "bar" -->
Run Code Online (Sandbox Code Playgroud)

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

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

Properties properties = new Properties();
properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("filename.properties"));
// ...
Run Code Online (Sandbox Code Playgroud)

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