ajax - Web 应用程序如何与服务器通信?

标签 ajax web-services rest soap interface

假设我想创建一个协作网络应用程序,用户可以在其中同时工作,例如一个图表。我在客户端有我的交互式网站(HTML/CSS/JavaScript),假设一个 Java 应用程序在服务器端同步一个集中模型。 客户端和服务器将如何交换消息?为了更好地了解系统应该如何工作,这里有一些细节和一个小插图:

enter image description here

要求

  • 底层技术应支持授权通信以显示/隐藏敏感信息。
  • 图表的模型应该只存在于服务器上(集中模型,没有副本),因此更改应该广播给其他用户(当前正在编辑同一文档的其他浏览器)。
  • 收到模型更改后,服务器应执行计算要求更高的任务,例如一致性检查,并通知用户,例如一个 Action 是无效的。

约束

  • 系统不得轮询或设置标志(应该是直接通信)。
  • 网站在使用过程中不得重新加载。
  • 在客户端上运行的软件必须仅限于 JavaScript。

我发现的技术

以下是我看过的一些解决方案,从(恕我直言)最适合到最不适合,因此我不确定列表是否完整以及我的所有假设是否正确。

  • 使用 javax.jws 的 Java Web 服务 - 该服务将提供由 WSDL 描述的 API,并能够使用 HTTP 协议(protocol)响应 SOAP 消息,但 JavaScript 可以处理这些消息吗?

  • Servlet 和 Java 服务器页面 (JSP) - 据我所知,需要重新加载页面才能获取新内容(这不是与 PHP 非常相似吗?两者都在服务器上执行以生成 HTML 页面..)

我已经找到了 this question但是,其中没有提供具体的技术答案。感谢您的任何提示和澄清,我非常感谢!

最佳答案

正如您已经发现的,有许多方法可以解决这个常见问题。

SOAP(有时称为“Web 服务”或“WS*”)是为应用程序之间的通信而开发的标准。它的优势在于精确的规范(因此有许多优秀的库)、客户端和服务器的接口(interface)共享(通过 WSDL)以及可发现性。

但是,SOAP 在浏览器中的支持非常有限(如果有的话)。

最常见的现代方法可能是基于 XML 或 JSON 的 RESTful Web 服务。当在浏览器中用作客户端时,JSON 是首选,因为在 JavaScript 中解码是微不足道的。许多框架和库(如 Angular 和 jQuery)承担繁琐的跨浏览器 AJAX 请求制作。但是,需要一些样板文件将数据包装在 HTML 中。如果您考虑更简洁的架构和可维护性,这个缺点也可能是一个优点。

由于您在服务器上使用 Java,因此您可能还想了解 JSF 的 AJAX 功能。它并没有真正使用 REST(没有明确定义的资源),而是异步加载 HTML 页面的服务器端呈现 block (读取:AJAX)并在 DOM 中重新呈现它们。这可以看作是真正的 REST 和整页重新加载之间的折衷。它的好处是您不必定义任何资源,只需要定义您的支持 bean。缺点是: 可能的开销,因为您下载的是 HTML 而不是纯数据;并且可测试性差,因为您无法在 JSF 上下文之外访问呈现的 block 。


完全不同的问题是 1. 并发请求的同步和 2. 从服务器与客户端的通信。对于后者,您可以查看 Web Sockets(下一件大事)或古老的轮询。

如果您担心同时编辑同一数据,则必须实现一种策略来判断是否可以合并编辑或是否必须拒绝编辑。客户端将需要处理此类情况并向用户提供审查、覆盖或恢复等。


编辑:关于 Java servlet 和 JSP 的更多信息

Servlet 只不过是处理特定 HTTP 请求的 Java 类,通常绑定(bind)到特定的 URL 路径。它们类似于 PHP 页面:在 PHP 中,网络服务器收到请求并搜索相应的 PHP 文件。然后它解析 PHP 脚本并返回响应。 Servlet 做同样的事情,只是语法非常不同。 JSP 主要是尝试将更多类似于 PHP 的语法引入 Java。在幕后,它们被呈现为纯 Java servlet。

Java servlet 的历史比 AJAX 还早,但许多框架已经接受了在服务器上实现灵活资源处理的挑战。最著名的是 Jersey 和 RESTEasy,它们是 Java EE 标准 JAX-RS 的实现;和 Spring,这是一个基于请求的框架,可以很好地与 Java EE 标准竞争。然后还有 JSF,它有时被称为 JSP 的继承者。对于用户来说,它与 JSP 略有不同,但语法更好,恕我直言,它比 JSP 功能更丰富。特别是考虑像 PrimeFaces 这样的扩展.与 JSP 相比,JSF 支持 AJAX,许多内置组件能够使用 AJAX 与服务器通信,包括调用 Java 函数和重新呈现页面的某些部分。

关于ajax - Web 应用程序如何与服务器通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38775325/

相关文章:

javascript - 从帖子中选择2 createSearchChoice id

php - 将 SOAP XML 响应转换为 PHP 对象或数组

asp.net - 对 Web 服务调用中的 session 的只读访问权限?

java - 在java中上传和读取text/csv文件

JavaScript 对象分配问题

php - 在 ajax 响应文本中发送 json 字符串和 html 数据 - 如何?

javascript - MVC 模型绑定(bind) jQuery Ajax

c# - 如何将流中的图像另存为在 retrofit2 中发送到 wcf web 服务

Spring REST端点和服务层分离

c# - 如何使用 Fiddler 在 post 方法中将值传递给字符串数组?