如何从TomCat中运行的Java应用程序中读取Apache Httpd Env变量?

时间:2013-01-20 11:42:22

标签: java apache tomcat stripes

我在Apache Httpd后面的TomCat容器中运行了几个Java应用程序。在Apache Httdp中,如果安装了mod_env,则可以使用SetEnv FOO bar设置Env变量。如何在TomCat中运行的Java应用程序中读取这些变量? Java应用程序主要使用Stripes构建,如果有帮助的话。

2 个答案:

答案 0 :(得分:8)

因为Tomcat是在Apache之外启动的,所以它无法访问Apache环境。这意味着您需要一些将环境变量从Apache传递到Tomcat的方法。

如果使用mod_jk连接Apache和Tomcat,则可以使用JkEnvVar指令将特定变量传递给Tomcat。来自mod_jk documentation

  

指令JkEnvVar允许您将环境变量从Apache服务器转发到Tomcat引擎。您可以将默认值作为第二个参数添加到指令中。如果没有显式给出默认值,则只有在运行时设置变量时才会发送变量。   可以通过request.getAttribute(attributeName)在Tomcat端检索变量作为请求属性。请注意,通过JkEnvVar发送的变量不会列在request.getAttributeNames()中。

如果您使用HTTP代理(mod_proxy)而不是mod_jk,则可以使用mod_headers将环境变量作为请求标头传递,例如:

RequestHeader set X-MYVAR %{MYVAR}e

...然后在Tomcat中你必须提取X-MYVAR标题。

答案 1 :(得分:2)

此外,如果您通过AJP使用模块代理,即mod_proxy_ajp,则根据docs

  

转发名称前缀为AJP_的环境变量   作为AJP请求属性到原始服务器(具有AJP_前缀   从密钥的名称中删除。)