我想为许多不同的客户部署相同的 Web 应用程序。每个部署都需要在 web.xml 配置文件的元素之一中使用不同的值。
如果不为每个客户构建不同的 .war 文件(在每个 .war 的 web.xml 中设置不同的值),是否可以为不同的客户配置值?例如,web.xml 文件能否从每个部署属性文件中获取值?
我们使用 Tomcat 作为 servlet 容器。
最佳答案
您可以使用 Tomcat 的 JNDI support 在 web.xml 之外指定不断变化的属性.
例如,在 Context 中指定一个环境条目元素:
<Context ...>
...
<Environment name="maxExemptions" value="10"
type="java.lang.Integer" override="false"/>
...
</Context>
然后在您的 web.xml 中指定指向此环境变量的链接:
<env-entry>
<env-entry-name>maxExemptions</param-name>
<env-entry-type>java.lang.Integer</env-entry-type>
</env-entry>
然后使用(来自 Professional Apache Tomcat 6 )从您的代码调用:
private final Object lock = new Object();
...
synchronized (lock) {
Context initCtx = new InitialContext();
Context envCtx = initCtx.lookup("java:comp/env");
Integer maxExemptions = (Integer) envCtx.lookup("maxExemptions");
}
或者您可以使用 <jndi-lookup />
通过 Spring 将您的值注入(inject)到您的应用程序中
<bean id="someBean">
<property name="maxExemptions">
<jndi-lookup jndi-name="xxx" />
</property>
</bean>
关于web-applications - 如何自定义我的 web.xml 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/997311/