在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运行时类路径。然后你就可以得到它的classpath资源:
Properties properties = new Properties();
properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("filename.properties"));
// ...
然而,与特定的唯一宗旨,以服务一个数据库连接,你确实更好用servletcontainer管理数据源作为回答Qwerky。你可能需要配置的只是数据源名称。
这引发了一个问题,你如何将一个命令行参数传递给一个servlet?最好以独立于主机的方式。该servlet类只公开'void doPost(HttpServletRequest请求,HttpServletResponse响应)'。没有我可以看到的命令行参数,或者我又错过了什么? –
这取决于你说的命令行参数。如果它们是每个请求参数,则使用请求参数或属性。您还可以使用所有servlet在会话之间共享的会话属性。 @Bozho说,“全局”参数可以从外部文件中获取。这个文件的路径可以通过系统属性发送。 – AlexR
@MichaelKjörling在您的servlet容器上配置它。对于tomcat它是catalina.sh – Bozho