Tomcat6忽略META-INF/context.xml

sta*_*wer 3 tomcat jndi context.xml

Tomcat6一直忽略我的META-INF/context.xml.当我尝试查找"tt"时,我一直得到"名字tt不受此上下文约束"(请参阅​​"详细信息").

当我将META-INF/context.xml的内容放在server.xml中的'context'标记内时,它可以工作.我还检查过$ Tomcat-base/Catalina/localhost是空的,所以我的META-INF/context.xml没有被覆盖.


细节:

Tomcat版本:6.0.10

这是我的Webroot结构:

Webroot
       | -META-INF
       | | -context.xml
       |
       | -WEB-INF
             | -web.xml

context.xml的内容:

<Context>
    <Environment name="tt" value="this is a string" type="java.lang.String"></Environment>
</Context>
Run Code Online (Sandbox Code Playgroud)

server.xml中此webroot的Context标记:

<Context path="/test" docBase="E:\javaProjects\TestProject\Webroot" reloadable="true"></Context>
Run Code Online (Sandbox Code Playgroud)

我查找"tt"的方式:

...
Context ic = new InitialContext();
Context ec = (Context) ic.lookup("java:comp/env");
String str = (String) ec.lookup("tt");
System.out.println("str is "+str);
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

javax.naming.NameNotFoundException: Name tt is not bound in this context
Run Code Online (Sandbox Code Playgroud)

Jos*_*seK 5

如果我<Context>从server.xml中删除了代码,并且仅在META-INF/context.xml

<Context>在两个地方都定义时,它不起作用.

其次,将您的类型更改为String,而不是Integer

<Environment name="tt" value="this is a string" type="java.lang.String"></Environment>
</Context>
Run Code Online (Sandbox Code Playgroud)