GWT的服务器端配置

时间:2009-09-18 15:45:35

标签: configuration gwt

尽量避免在这里重新发明轮子。我有一个Google Web Toolkit页面,我准备部署,但我正在与之通信的Web服务在部署的服务器上的相对地址与本地测试机器不同。

因此,我正在寻找一种简单的方法来部署一些易于编辑的配置文件,我可以在服务器端放置基本设置。关于如何做到这一点,我有几个想法,但它们看起来有点hacky,在我看来,似乎已经有了解决这类问题的方法(毕竟,每服务器设置是非常常见的事情!)< / p>

有什么想法吗?

编辑:由于这似乎没有引起太多关注,让我概述一下我最初的想法:在我之前使用AJAX调用查询的GWT文件中存储一个本地静态文件逻辑。当文件返回时,我解析出我的数据并将它们存储为全局可访问的变量,然后允许页面构建逻辑运行。看起来很笨,并且在任何加载之前等待AJAX​​返回有很大的缺点,但它会起作用。有更好的建议吗? (请?)

我的解决方案: 我自己找到了一个解决方案,但它与我的具体情况非常相关,因此我不知道它对普通用户有多大用处。无论如何,我会在这里发布它,因为有人发现它很有用。

我正在处理的页面实际上是嵌入在ASP.net站点中的GWT控件。利用这一点,以及我对GWT Dictionary类的发现,我把这样的“设置”系统放在一起:

首先,我想要的设置(在这种情况下是web服务的地址)在ASP.net Web.Config文件中设置

<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来获取设置... whew!所以是的,这是一个很好的长期复杂的方法,但它适用于我。鉴于亚历山大的答案似乎与我所寻求的内容最为一致,所以赏金归于他,但感谢所有投入我这个棘手问题的人!

3 个答案:

答案 0 :(得分:5)

随意纠正我,但似乎您不需要运行时服务器端配置。如果你真的需要这种灵活性,或者你想为所有部署使用单个.zip,你可以使用Yahoo's Performance Rules中给出的技术 - (参见“添加过期或缓存控制标题”一节) - 远期未来到期头。这意味着浏览器会大量缓存AJAX请求,并且只会导致第一次请求的轻微减速。

我实际上建议使用编译时标志和GWT提供的属性系统,而不是这样做。为了简化这一过程,我制作了一个名为auto-config available on github的小包。使用它可以非常简单地访问每个部署配置。添加以下类:

public interface MyConfiguration extends AutoConfiguration {
    public String getFoobar();
}

要从GWT代码中访问该值,请添加以下简单帮助:

private MyConfiguration getMyConfiguration() {
    return (MyConfiguration) GWT.create(MyConfiguration.class);
}

创建几个不同的.gwt.xml文件,每个部署服务器一个。然后使用父.gwt.xml文件最小化任何重复。有关此主题的更多信息,请阅读CompileOnePermutation on the GWT Wiki

总之,将以下代码段添加到每个部署.gwt.xml中(并确保添加所需的继承行):

<set-configuration-property name="foobar" value="whee1234" />

希望有所帮助:)

答案 1 :(得分:1)

最简单的方法似乎是存储server代码可访问的配置信息,即ServiceImpl类。

您有多种选择,通常是:

  • 设置环境变量;
  • 设置系统属性;
  • 将属性文件放在类路径中;
  • 查找JNDI bean。

答案 2 :(得分:1)

我对你的要求感到有点困惑。

如果您想要编译一次,并在具有不同选项的不同服务器上运行GWT应用程序,并在GUI构建期间在客户端使用选项,则有许多选项。

使用以下方式将信息输入您的程序:

  • 环境变量
  • 系统属性

通过以下方式将信息传达给您的客户:

  • AJAX调用文件(如您指定的那样)
  • 从JSP而不是静态HTML提供GUI。让JSP将信息嵌入JS变量中,GUI可以使用JSNI调用访问该变量。这样可以节省您的往返费用。