在ASP.NET中,web.config
可以保存应用程序范围的设置。 Java EE Servlet是否有相应的文件(位于war
或jar
存档之外)?
我需要的是指出一个配置文件的地方,该配置文件当前包含四个属性,这些属性反过来一起导致存储其余数据和配置的数据库。 (服务器,数据库,用户名和密码。)这些值需要易于更改,无需重新打包和重新部署整个应用程序,因此配置文件,但硬编码应用程序中配置文件的路径(即使它是一个常量)似乎远非最佳。
任何提示?我已经尝试了谷歌,但发现它似乎很少相关 - 而我所发现的东西看起来却因为我的需求而过度设计。
答案 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