簡體   English   中英

GWT的服務器端配置

[英]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類。

您有多種選擇,通常:

  • 設置環境變量;
  • 設置系統屬性;
  • 將屬性文件放在類路徑中;
  • 查找JNDI bean。

我對你所要求的東西感到有點困惑。

如果您想要編譯一次,並在具有不同選項的不同服務器上運行GWT應用程序,並在GUI構建期間在客戶端使用選項,則有許多選項。

使用以下方法將信息輸入您的程序:

  • 環境變量
  • 系統屬性
  • 等等

通過以下方式獲取客戶端的信息:

  • AJAX調用文件(如您所指定)
  • 從JSP而不是靜態HTML提供GUI。 讓JSP將信息嵌入JS變量中,GUI可以使用JSNI調用訪問該變量。 這可以節省您往返的費用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM