我在Apache Httpd后面的TomCat容器中运行了几个Java应用程序。在Apache Httdp中,如果安装了mod_env,则可以使用SetEnv FOO bar
设置Env变量。如何在TomCat中运行的Java应用程序中读取这些变量?
Java应用程序主要使用Stripes构建,如果有帮助的话。
答案 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_前缀 从密钥的名称中删除。)