【问题标题】:How can I customize my web.xml configuration如何自定义我的 web.xml 配置
【发布时间】:2010-11-03 02:18:14
【问题描述】:

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

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

我们使用 Tomcat 作为 servlet 容器。

【问题讨论】:

    标签: web-applications configuration tomcat jakarta-ee


    【解决方案1】:

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

    或者您可以使用 &lt;jndi-lookup /&gt; 使用 Spring 将您的价值注入您的应用程序

    <bean id="someBean">
        <property name="maxExemptions">
            <jndi-lookup jndi-name="xxx" />
        </property>
    </bean>
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2018-09-16
          • 2012-03-10
          • 2012-11-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-25
          • 1970-01-01
          相关资源
          最近更新 更多