尽量避免在这里重新发明轮子。我有一个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!所以是的,这是一个很好的长期复杂的方法,但它适用于我。鉴于亚历山大的答案似乎与我所寻求的内容最为一致,所以赏金归于他,但感谢所有投入我这个棘手问题的人!
答案 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
类。
您有多种选择,通常是:
答案 2 :(得分:1)
我对你的要求感到有点困惑。
如果您想要编译一次,并在具有不同选项的不同服务器上运行GWT应用程序,并在GUI构建期间在客户端使用选项,则有许多选项。
使用以下方式将信息输入您的程序:
通过以下方式将信息传达给您的客户: