在 Web 中引用环境变量.xml

2022-09-01 03:42:29

我正在预打包一个JSP Web应用程序,该应用程序依赖于web.xml中的一些文件路径设置。这些设置在打包时是未知的,因为它们引用客户在部署整个应用程序(Web 应用是其中的管理界面)时将设置的路径。

似乎在我的安装程序脚本中避免令牌和文件修改的最简单方法是向用户询问安装位置,将此位置设置为环境变量(例如JAVA_HOME),并让web.xml始终引用该变量。

有没有办法从Web.xml中引用环境变量值?Google 搜索导致 J2EE 方法从 ejb xml 文件中设置环境变量。这不是我想要的。


答案 1

您可以在任何 tomcat xml 配置文件中使用 Ant 样式的变量替换,例如:

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>${foo}</url-pattern>
</servlet-mapping>

其中是 Java 系统属性 (sysprop)。foo

你不能直接使用OS环境变量(envvars),我认为...

要使用envvars,您可以把

set "CATALINA_OPTS=-DsomeJavaSysProp=%SOME_OS_ENVVAR%"

在(或类似地在 *nix)。您可能需要创建该文件。Tomcat 将在启动时运行此文件。bin/setenv.batbin/setenv.sh

就像envvar(而不是命令行选项)一样,系统上的其他用户不应该看到它(保存古老的Unixes),尽管我还没有测试过这一点。CATALINA_OPTS

http://tomcat.apache.org/tomcat-7.0-doc/config/

如果您使用的是Spring,则可以创建一个bean,然后直接在Spring XML配置文件中使用envvars或sysprops(尽管不是)。<context:property-placeholder/>web.xml


答案 2

我认为您不想使用环境变量(我认为无法从web.xml访问),而是使用环境条目[12]。这样:

<env-entry>
    <env-entry-name>Bla/SomeFilePath</env-entry-name>
    <env-entry-type>java.lang.String</env-entry-type>
    <env-entry-value>/opt/bla</env-entry-value>
</env-entry>

您可以使用 SomeFilePath,如下所示:

InitialContext ic = new InitialContext();
String s = (String) ic.lookup("java:comp/env/ejb/Bla/SomeFilePath");

推荐