在客户端更新Web应用程序的最佳实践(GWT)

时间:2014-05-05 11:00:39

标签: java javascript gwt web session-cookies

现在我遇到了一个问题:

  1. 用户打开网页应用页面,获取javaScript(ModuleName.nocache.js); 然后我更新客户端(roc请求,查看等​​)。
  2. 用户未在浏览器中关闭网页应用标签,未更新网页。他点击某处并随机爆炸。例如,RPC不起作用,servlet移动到任何地方,有很多错误。
  3. 现在我要实现方案:
    用户必须具有web应用版本的cookie属性。
    根据要求我看到它并作为回应迫使他更新页面(不知道如何)。
    如果用户的请求无法发送,gwt会强制他更新页面(不知道如何)。

    但我认为必须有一种最佳实践方法来解决这个问题。

2 个答案:

答案 0 :(得分:6)

AsynCallback中抓住IncompatibleRemoteServiceExceptionStatusCodeException。第一个告诉你客户端代码与服务器端代码不兼容;第二个可以告诉你那里不再有RPC servlet(寻找404状态代码)。 然后,您可以向用户显示一条消息,提示他重新加载页面(例如,这就是Google网上论坛所做的)。

也就是说,如果更改相对较小,有一些方法可以缓解此问题:您可以将序列化策略文件保留在服务器端,以便服务器可以处理来自不同客户端版本的请求。这些变化必须以某种方式向后兼容 然后,您可以在服务器端检测客户端版本(使用最新的序列化策略文件列表并检查客户端是使用其中一个还是较旧的;或使用请求标头或cookie)并包含一些内容响应(响应标题或cookie)告诉它有一个新版本 或者您可以定期轮询服务器(显然使用RPC)以获取最新版本的应用程序。

答案 1 :(得分:0)

另一种方法:

  1. 如果为空(如果没有,请转到下一步),将com.google.gwt.core.client.GWT.getPermutationStrongName();保存在LocalStorageCookies中,然后完成投放。
  2. 当你的应用加载时,再次获取permutationStrongName,并检查保存的是否不同。
  3. 如果向服务器请求所有内容的力量不同(如果您需要/需要"中断"异步过程,您可以使用GQuery - promises)。然后,在您的LocalStorageCookies新gwt的排列ID中替换。
  4. 你可以随时加载你的应用程序(这不是什么大问题)。现在,当服务器上的版本发生变化时,您就可以了。