我正在使用 Ubuntu 的 Tomcat 6 默认安装。我正在部署 ROOT.war,并尝试设置特定于它的环境变量,即可从 Servlet.init(config) 中的 System.getenv() 访问。
根据文档(http://tomcat.apache.org/tomcat-6.0-doc/config/context.html),我可以在 conf/Catalina/localhost/ROOT.xml 中的 Context 元素中指定这一点。我使用以下内容创建了它:
<Context>
<Environment name="FOO" value="bar" type="java.lang.String" override="false"/>
</Context>
我已经像往常一样部署了 webapps,即 webapps/ROOT.war。
Servlet.init(config) 中的 Server.getenv("FOO") 仍返回 null。我遗漏了什么?
答案1
来自 Tomcat 用户邮件列表:
Tomcat 文档中没有完全说明这一点,但是您没有创建可以使用 System.getenv 检索的环境变量。相反,您将条目放入 JNDI 上下文中。
您将需要像这样检索它们:
// Obtain our environment naming context
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
String FOO = (String)envCtx.lookup("FOO");
// now FOO should have the value "bar" from your <Environment>
JNDI 资源的文档可以在这里找到: http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html
希望有帮助,
- -克里斯