我有一个在tomcat上运行的web服务(并且正在运行)。我想将端点URL提取到战争之外的文件中,以便可以更改它而无需重新部署战争。我在Windows XP上使用Tomcat 6独立运行本地。
我的想法是在Context中将它作为上下文参数或环境变量。
我不确定哪个更好,因为我无法识别上下文,我不知道哪个会起作用。所以我的第一个问题,我应该使用以下哪些条目(如果有的话)?
<Context path="/myapp" docBase="myapp">
<Environment name="webserviceURI" type="java.lang.String" override="true" value="endpointURLredacted"/>
<context-parameter>
<name>uri</name>
<value>endpointURLredacted</value>
</context-parameter>
</Context>
假设环境线是正确的,我要检索的代码是:
InitialContext ic = new InitialContext();
endpoint = (String)ic.lookup("webserviceURI");
然而....
我尝试将这个在context.xml文件中添加到META-INF文件夹中,我的印象是当我部署战争时,引用另一个问题的答案,“当你部署WAR时,将上下文片段(META-INF / context.xml)复制到conf / Catalina / [host]目录。“好吧,那不会发生。我真的不想这样做,因为我希望上下文与战争完全分开存在,但这是一个测试,看看我是否能够做到这一点。失败。
所以我尝试手动将上下文xml(重命名为myapp.xml)添加到该文件夹(必须先创建它),但我仍然认为文件没有被读取。
当我运行应用程序时,我收到类似“javax.naming.NameNotFoundException:名称webserviceURI未绑定在此Context中”的错误。
我尝试打印出初始上下文的环境:
Context: {java.naming.factory.initial=org.apache.naming.java.javaURLContextFactory,java.naming.factory.url.pkgs=org.apache.naming}
所以我不认为上下文文件会被读取,无论我把它放在哪里。
这不是一个servlet(也许它应该是?)如果重要的话。
答案 0 :(得分:2)
我从上下文中删除了docBase属性,使用了Environment标记,并使用java:comp / env / webserviceURI检索了值,瞧!成功。
也许这会帮助别人!