在web.xml中引用环境变量

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

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

有没有办法从web.xml中引用环境变量值? Google搜索引出了来自ejb xml文件的SETTING环境变量的J2EE方法。 这不是我想要的。

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

 mvc-dispatcher ${foo}  

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

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

要使用envvars,你可以放

 set "CATALINA_OPTS=-DsomeJavaSysProp=%SOME_OS_ENVVAR%" 

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

由于CATALINA_OPTS是一个envvar(而不是命令行选项),它不应该被系统上的其他用户看到(保存古老的Unix),尽管我没有测试过。

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

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

我认为你不想使用环境变量(我认为无法从web.xml访问),但环境条目 [ 1,2 ]。 像这样:

  Bla/SomeFilePath java.lang.String /opt/bla  

你可以使用SomeFilePath:

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

基本上,你不这样做。 web.xml应该包含事物的默认值,是的,但是在实际进行部署时应该覆盖它们。 如果要部署到Tomcat,则可以通过在用于部署的context.xml中包含适当的条目来执行此操作。 例如:

       

其他容器将有自己的机制来执行此操作。 您必须查找他们的文档(或者更加关注您的帮助请求)。

我不完全清楚你的局限性,但也许你可以做到这一点(我假设它是你试图配置的init-param):

1)在web.xml中保留未指定的变量
2)创建一个ServletContextListener并将其添加到您的应用程序
3)监听servlet的初始化
4)在该点设置servlet的init-param

我尝试了类似的问题,但它失败了,因为事实certificate第三方servlet(我也不想搞砸)实际上根本不是一个servlet,所以上下文从来没有初始化。 但也许这里有机会……

你必须按顺序放入env-entry:

  maxAmount java.lang.String aString  

否则,您将在web.xml上遇到validation错误

ref: https : //community.oracle.com/thread/840452? tstart = 0

可以在xml文件中访问环境变量,如下所示:

 ${env.ENVIRONMENT_VARIABLE_NAME} 

显然,用户帐户设置和访问问题可能存在问题,但我已尝试使用系统变量,它可以正常工作!