2014-03-31 32 views
0

我有一個運行在開發和生產模式以及網絡和移動設備上的GWT項目。如何在GWT中的不同配置之間切換?

我對每種模式都有不同的web.xml文件。

我還需要每個版本的不同常數。目前我使用這個:

class Params { 

    public static final String SOME_CONSTANT = "value"; 
    ... 
} 

SOME_CONSTANT的值可能會改變模式(應用程序的版本)。

我怎樣纔能有不同的常數爲每個模式(dev,prod,web,mobile)?

回答

0

將這些常量移動到每個環境的屬性文件中。

創建這樣一個文件夾(必須是您最終生成的WAR文件之外,地方上的服務器)

resources 
|__dev 
|__prod 
|__web 
|__mobile 

每個文件夾包含的屬性文件基於環境中具有值的。

將服務器啓動時的環境值作爲系統屬性或環境變量傳遞。在應用程序上下文初始化時加載所有屬性,並在應用程序的任何地方使用它。

使用ServletContextListener讀取服務器啓動時的所有屬性。

如何根據系統屬性或環境變量加載屬性文件?

使用

System.getProperty() 

System.getenv() 

讀取屬性文件的位置。

,並裝入特性文件

Properties properties = new Properties() 
properties.load(new FileInputStream(new File(absolutePath))); 

您可以將屬性應用程序上下文屬性,它可以從任何地方,包括JSP,以及讀取。


- 編輯 -

加載屬性文件在服務器啓動時:

的web.xml

<listener> 
    <listener-class>com.x.y.z.server.AppServletContextListener</listener-class> 
</listener> 

AppServletContextListener.java

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.util.Properties; 

import javax.servlet.ServletContextEvent; 
import javax.servlet.ServletContextListener; 

public class AppServletContextListener implements ServletContextListener { 

    private static Properties properties = new Properties(); 

    static { 
     // load properties file 
     String absolutePath = null; 
     if (System.getenv("properties_absolute_path") == null) { 
      absolutePath = System.getProperty("properties_absolute_path"); 
     } else { 
      absolutePath = System.getenv("properties_absolute_path"); 
     } 
     try { 
      File file = new File(absolutePath); 
      properties.load(new FileInputStream(file)); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void contextDestroyed(ServletContextEvent servletContextEvent) { 
    } 

    @Override 
    public void contextInitialized(ServletContextEvent servletContextEvent) { 
     servletContextEvent.getServletContext().setAttribute("properties", properties); 
    } 

    public static Properties getProperties() { 
     return properties; 
    } 

} 
+0

這是在GWT客戶端?你能否給出一個更詳細的例子? – confile

+0

資源文件夾必須在最終生成的戰爭之外。將資源文件夾放在服務器上的某處。使用servlet上下文偵聽器在服務器啓動時加載屬性文件。使用從Entry Point類調用的簡單RPC調用,在客戶端傳遞加載的屬性文件。你可以做更多的事情。將屬性存儲爲應用程序作用域屬性,該屬性可以從任何位置(包括JSP)讀入。 – Braj

+0

您能否更新您的描述並提供更詳細的示例?如果PhoneGap環境中沒有服務器,你會怎麼做? – confile

相關問題