当您使用脚本语言开发webapp时,您在项目的目录树中有一个文件,其中配置在部署时定义,并在运行时读取以进行初始化。将Web应用程序部署为已编译的WAR文件时,情况会发生显着变化,因为您既无法访问任何目录树,也无法编辑存档内容。
这是我的方案:我的应用程序需要smtp.properties
才能在运行时发送电子邮件,因此该文件包含某些敏感信息,我不想与其他Web应用程序共享。这意味着我不会将文件放在$CLASSPATH
中。另一种选择是检查已知位置,但这具有明显的可移植性问题。仅举一例:在Linux上你有/etc
,在Windows上没有/etc
目前我使用ServletContext.getInitParameter(String)
读取设置,但这会对数据格式施加约束,实际文件的位置取决于servlet容器。
所以我的最终答案是:在JavaEE的土地上与config.php
(或config.yml
)最接近的匹配是什么?
免责声明:我读了很多类似的问题,似乎简短的回答是没办法的。如果您希望在部署时覆盖其他组件的设置(如日志记录),这也很麻烦
答案 0 :(得分:1)
在Java EE世界中,走的路是每个JNDI。在Web应用程序中,您可以通过标准化的JNDI API读取配置设置。这包括SMTP的登录凭据,以及配置的数据库连接等。
有关详细信息,请阅读我对类似问题的回答:How to portably read configuration data from a servlet
答案 1 :(得分:0)
在Java中,相当于config.php文件肯定是WEB-INF中的web.xml文件。我没有看到the actual file's place depends on the servlet container
的问题,你从未指定读取参数的路径,没有?
顺便说一下,如果你想在战争中创建自己的属性文件,可以使用以下方法访问它:
URL propPath = getClass().getResource("your_relative_path");