將這些常量移動到每個環境的屬性文件中。
創建這樣一個文件夾(必須是您最終生成的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;
}
}
這是在GWT客戶端?你能否給出一個更詳細的例子? – confile
資源文件夾必須在最終生成的戰爭之外。將資源文件夾放在服務器上的某處。使用servlet上下文偵聽器在服務器啓動時加載屬性文件。使用從Entry Point類調用的簡單RPC調用,在客戶端傳遞加載的屬性文件。你可以做更多的事情。將屬性存儲爲應用程序作用域屬性,該屬性可以從任何位置(包括JSP)讀入。 – Braj
您能否更新您的描述並提供更詳細的示例?如果PhoneGap環境中沒有服務器,你會怎麼做? – confile