Ajax 通信:介绍

最终,所有 GWT 应用程序都在最终用户的 Web 浏览器中以 JavaScript 代码运行。但通常,您需要创建的不仅仅是独立的客户端应用程序。您的应用程序需要与 Web 服务器通信,发送请求并接收更新。

传统 Web 应用程序每次与 Web 服务器通信时,都会获取一个全新的 HTML 页面。相比之下,AJAX 应用程序将用户界面逻辑卸载到客户端,并异步调用服务器,只发送和接收数据本身。这样一来,AJAX 应用程序的 UI 就能更加响应式和流畅,同时减少应用程序的带宽需求,并减轻服务器的负载。

现在,您已经创建了 StockWatcher 应用程序的初始实现,在客户端代码中模拟股票数据。在接下来的三个教程中,您将学习如何从服务器检索股票数据。

注意:有关 GWT 应用程序中客户端-服务器通信的更广泛指南,请参阅 与服务器通信

选择实现策略

GWT 提供了几种不同的方法来与服务器通信。您最终使用的数据格式将取决于您需要交互的服务器。

进行远程过程调用 (GWT RPC)

如果您可以在后端运行 Java,并且正在为应用程序的服务器端业务逻辑创建接口,那么 GWT RPC 可能是您的最佳选择。GWT RPC 是一种通过标准 HTTP 将 Java 对象传递到服务器和从服务器传递到服务器的机制。您可以使用 GWT RPC 框架透明地调用 Java servlet,并让 GWT 处理对象序列化等低级细节。

要试用它,请参阅教程 进行远程过程调用

通过 HTTP 检索 JSON 数据

如果您的应用程序与无法托管 Java servlet 的服务器对话,或者与已经使用 JSON 或 XML 等其他数据格式的服务器对话,那么您可以发出 HTTP 请求来检索数据。GWT 提供了通用的 HTTP 类,您可以用来构建请求,以及 JSON 和 XML 客户端类,您可以用来处理响应。您还可以使用覆盖类型将 JavaScript 对象转换为 Java 对象,这样您在开发时就可以在 IDE 中与它们进行交互。

要试用它,请参阅教程 检索 JSON 数据。虽然本教程只介绍了针对 JSON 数据发出 HTTP 请求,但代码可以适应使用 XML 数据来代替。

进行 JSONP 的跨站点请求

如果您正在创建一个需要使用一个或多个远程 Web 服务器的数据的混合应用程序,那么您将不得不解决 SOP(同源策略)访问限制。在本教程中,您将使用 JsonpRequestBuilder 来检索带填充的 JSON(JSONP)。

要试用它,请参阅教程 进行跨站点请求

注意:您可以使用各种公共的 JSON 格式化数据来源进行练习,包括 Google Data APIYahoo! Web Services

进行异步调用

无论您使用 GWT RPC 还是通过 HTTP 获取 JSON 数据,您从 HTML 页面到服务器的所有调用都是异步的。这意味着它们不会阻塞等待调用返回。调用后的代码会立即执行。调用完成后,您在进行调用时指定的回调方法将执行。

异步调用是 AJAX(异步 JavaScript 和 XML)开发的核心原则。进行异步调用而不是更简单的(对于开发人员)同步调用的好处在于可以改善最终用户的体验。

  • 用户界面保持响应。Web 浏览器的 JavaScript 引擎通常是单线程的,因此同步调用服务器会导致网页“挂起”,直到调用完成。如果网络速度慢或服务器没有响应,这可能会破坏最终用户的体验。
  • 您可以在等待挂起的服务器调用时执行其他工作。例如,您可以在同时从服务器检索数据以填充界面时构建用户界面。这缩短了用户在页面上看到数据的总时间。
  • 您可以同时进行多个服务器调用。但是,您可以使用异步调用添加多少并行性是有限的,因为浏览器通常将传出的网络连接数量限制为一次两个。

如果您不熟悉 AJAX 开发,那么异步调用最难适应的是调用是非阻塞的。但是,Java 内部类在很大程度上帮助您管理这一问题。

有关进行异步调用的更多信息,请参阅开发者指南 习惯异步调用