【问题标题】:Best practice to update web application on client side (GWT)在客户端 (GWT) 更新 Web 应用程序的最佳实践
【发布时间】:2014-05-05 19:52:17
【问题描述】:

现在我有一个问题:

  1. 用户打开web应用页面,获取javaScript(ModuleName.nocache.js); 然后我更新客户端(roc 请求、视图等)。
  2. 用户未在浏览器中关闭 Web 应用选项卡,未更新页面。他点击某处并随机爆炸。例如,RPC 不起作用,servlet 移动到任何地方,是否有很多错误。

现在我想实现场景:
用户必须具有网络应用版本的 cookie 属性。
应要求我看到它并作为回应强迫他更新页面(不知道如何)。
如果用户的请求无法传递 gwt 强制他更新页面(不知道如何)。

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

【问题讨论】:

    标签: java javascript gwt web session-cookies


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      另一种方法:

      1. 如果为空(如果不是,请转到下一步),将com.google.gwt.core.client.GWT.getPermutationStrongName(); 保存在您的LocalStorageCookies 中并完成流程。
      2. 当您的应用加载时,再次获取 permutationStrongName,并检查保存的是否不同。
      3. 如果向服务器请求所有内容的力量不同(如果您想要/需要“中断”异步进程,您可以使用GQuery - promises)。然后,在您的 LocalStorageCookies 中替换新的 gwt 的排列 id。

      您始终可以在您的应用已加载时执行此操作(没什么大不了的)。当您的服务器上的版本发生变化时,您现在可以。

      【讨论】:

      • 谢谢,很有用的东西
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多