gpt4 book ai didi

java - 将配置值传递给 servlet 而无需在 .war 文件中对其进行硬编码?

转载 作者:行者123 更新时间:2023-11-30 06:20:31 26 4
gpt4 key购买 nike

我正在使用 Eclipse 和 Tomcat 6 在 Java 中开发 Web 应用程序。

我需要将一个未硬编码到 .war 文件中的值传递给 servlet
例如,假设我的 servlet 需要一个文件名,而该文件名在每台服务器上都不同。
如何将它传递给 servlet,而不在 .war 文件中对其进行硬编码?

请帮助我了解如何执行此操作的说明:

  • 从 Eclipse 中(例如:将 xxxx 添加到文件 yyy 然后运行)
  • 在我将部署应用程序的服务器上

我在想getInitParameter的方向,但是除了web.xml里面 .war 文件,这不是一个选项,因为它需要是可配置的。因此,如果您能告诉我如何在外部文件中设置初始化参数,问题就解决了。

注意:我正在寻找非常准确的建议,例如“在那个 位置编辑那个 文件”。我找到了许多相关的问题和答案,但没有一个足够具体以使其有效。

最佳答案

有很多方法可以解决这个问题。这实际上取决于您在什么时候知道要加载的文件的位置。如果这是您要为每个 tomcat 实例/服务器配置的东西,那么环境变量或 JVM 参数可能是最简单的。然后,您可以在代码中通过 System.getProperty 查找此变量。

您可以通过 CATALINA_HOME/bin/setenv.sh 在每个 tomcat 的基础上传递 JVM 参数。

#!/bin/sh
CATALINA_OPTS="$CATALINA_OPTS
-Dmy.file.path=/path/on/this/host/file.txt"

在你的代码中:

String path = System.getProperty("my.file.path")

Dhanush 的建议也是一个很好的建议,从长远来看可能更具可持续性。它的优点是将所有每个环境的配置都保存在一个位置,您可以将其保存在源代码管理中。然而,使用他的方法,您仍然需要一种方法来从属性文件中选择适当的键(因为这个属性文件将捆绑在您的 war 中),您可以再次使用环境变量或 JVM 参数来控制它。

如果你想变得更高级一点,你可以考虑使用 JNDI

关于java - 将配置值传递给 servlet 而无需在 .war 文件中对其进行硬编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21707570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com