[英]Server-Side Configuration for GWT
試圖避免在這里重新發明輪子。 我有一個Google Web Toolkit頁面,我准備部署,但我正在與之通信的Web服務在部署的服務器上的相對地址與本地測試機器不同。
因此,我正在尋找一種簡單的方法來部署一些易於編輯的配置文件,我可以在服務器端放置基本設置。 關於如何做到這一點,我有幾個想法,但它們看起來有點hacky,在我看來,必須已經有這種問題的解決方案(畢竟,每服務器設置是非常常見的事情!)
有任何想法嗎?
編輯:由於這似乎沒有引起太多關注,讓我概述我的初步想法:在我任何其他邏輯之前,使用AJAX調用查詢我查詢的GWT文件的本地靜態文件。 當文件返回時,我解析出我的數據並將它們存儲為全局可訪問的變量,然后允許頁面構建邏輯運行。 看起來很笨,並且在任何加載之前等待AJAX返回有很大的缺點,但它會起作用。 有更好的建議嗎? (請?)
我的解決方案:我自己找到了一個解決方案,但它與我的具體情況非常相關,因此我不知道它對普通用戶有多大用處。 無論如何,我會在這里發布它,因為有人發現它很有用。
我正在處理的頁面實際上是嵌入在ASP.net站點中的GWT控件。 利用這一點,以及我對GWT Dictionary類的發現,我把這樣的“設置”系統放在一起:
首先,在ASP.net Web.Config文件中設置我想要的設置(在這種情況下是web服務的地址)
<appSettings>
<add key="serviceUrl" value="http://mySite.com/myService.asmx"/>
</appSettings>
在嵌入GWT控件的ASP頁面中,我添加了一個“靜態”javascript對象,其中包含我需要的配置設置:
<head runat="server">
<title>Picklist Manager</title>
<script type="text/javascript" language="javascript">
var AppConfig = {
serviceUrl: "<%= ConfigurationManager.AppSettings["serviceUrl"] %>"
};
</script>
<script type="text/javascript" language="javascript" src="gwtcontrol.nocache.js"></script> <!-- Include my GWT control -->
</head>
最后,在GWT中我創建了一個靜態的“AppConfig”類,它暴露了這個設置:
public class AppConfig {
public static String serviceUrl = "defaultUrl";
public static void Initialize() {
Dictionary appConfig = Dictionary.getDictionary("AppConfig");
if(appConfig == null) { return; }
servicePath = appConfig.get("serviceUrl");
}
}
從那里我可以在我的代碼中的任何地方調用AppConfig.serviceUrl來獲取設置...... 哇! 所以,是的,這是一個很好的長期復雜的方式,但它適用於我。 鑒於亞歷山大的答案似乎最符合我的要求,所以賞金歸於他,但感謝所有投入我的粘性小問題的人!
隨意糾正我,但似乎你不需要運行時服務器端配置。 如果你真的需要這種靈活性,或者你想在所有部署中使用單個.zip,你可以使用雅虎性能規則中給出的技術 - (參見“添加過期或緩存控制標題”一節) - 遠期未來過期標題。 這意味着瀏覽器會大量緩存AJAX請求,並且只會導致第一個請求的輕微減速。
我實際上建議使用編譯時標志和GWT提供的屬性系統,而不是這樣做。 為了簡化這一點,我在github上創建了一個名為auto-config的小包。 使用它可以非常簡單地訪問每個部署配置。 添加以下類:
public interface MyConfiguration extends AutoConfiguration {
public String getFoobar();
}
要從GWT代碼訪問值,請添加以下簡單幫助:
private MyConfiguration getMyConfiguration() {
return (MyConfiguration) GWT.create(MyConfiguration.class);
}
創建幾個不同的.gwt.xml文件,每個部署服務器一個。 然后使用父.gwt.xml文件最小化任何重復。 有關此主題的更多信息,請閱讀GWT Wiki上的CompileOnePermutation
總之,將以下代碼段添加到每個部署.gwt.xml中(並確保添加所需的繼承行):
<set-configuration-property name="foobar" value="whee1234" />
希望有幫助:)
最簡單的方法似乎是存儲server
代碼可訪問的配置信息,即ServiceImpl
類。
您有多種選擇,通常:
我對你所要求的東西感到有點困惑。
如果您想要編譯一次,並在具有不同選項的不同服務器上運行GWT應用程序,並在GUI構建期間在客戶端使用選項,則有許多選項。
使用以下方法將信息輸入您的程序:
通過以下方式獲取客戶端的信息:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.