2009-06-15 91 views
3

我想爲多個不同的客戶部署相同的Web應用程序。每個部署在web.xml配置文件的其中一個元素中需要不同的值。如何自定義我的web.xml配置

沒有爲每個客戶建立不同的.war文件(在每個.war的web.xml中設置不同的值),是否可以爲不同的客戶配置值?例如,web.xml文件可以從每個部署屬性文件中獲取值嗎?

我們使用Tomcat作爲servlet容器。

回答

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"); 
} 

O您可以使用彈簧將您的價值注入到您的應用程序中<jndi-lookup />

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

簡短的回答:不改變戰爭是不可能的。

一個更詳細的版本:戰爭可以包含一些參數和默認值,您可以經常使用應用程序服務器或Web服務器的控制檯更改這些參數和默認值。這取決於你想要配置什麼,這些標準的上下文/ servlet/...參數?

1

你可以將這個元素移到web.xml之外嗎?如果您可以從屬性文件中讀取它,那麼您可以爲每個客戶創建一個不同的屬性文件,併爲每個客戶打包屬性文件的戰爭。然後在運行時,您可以根據環境變量讀取適當的屬性文件。