如何自定义web.xml配置

时间:2009-06-15 17:26:57

标签: web-applications configuration tomcat java-ee

我想为许多不同的客户部署相同的Web应用程序。每个部署在web.xml配置文件的一个元素中需要不同的值。

如果没有为每个客户构建不同的.war文件(每个.war中的web.xml中设置了不同的值),是否可以为不同的客户配置值?例如,web.xml文件是否可以从每个部署属性文件中获取值?

我们使用Tomcat作为servlet容器。

3 个答案:

答案 0 :(得分:2)

您可以使用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");
}

或者您可以使用Spring <jndi-lookup />

将您的价值注入您的应用程序
<bean id="someBean">
    <property name="maxExemptions">
        <jndi-lookup jndi-name="xxx" />
    </property>
</bean>

答案 1 :(得分:1)

你可以将这个元素移到web.xml之外吗?如果您可以从属性文件中读取它,则可以为每个客户创建不同的属性文件,并将war与每个客户的属性文件打包在一起。然后在运行时,您可以根据环境变量读取相应的属性文件。

答案 2 :(得分:0)

简短的回答:不改变战争是不可能的。

更复杂的版本:war可以包含一些参数和默认值,您可以使用应用程序服务器或Web服务器的控制台进行更改。这取决于你想要配置的是这些标准的context / servlet / ...参数吗?