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

时间:2016-08-04 18:57:32

标签: ajax web-services rest soap interface

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

enter image description here

要求

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

约束

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

我发现的技术

以下是我所看到的一些解决方案,从(imho)排名最合适到最不合适,我不确定该列表是否完整且我的所有假设都是正确的。

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

    < / LI>
  • Servlets&amp; Java服务器页面(JSP) - 据我所知,需要页面重新加载来获取新内容(这与PHP几乎完全相同吗?两者都在服务器上执行以生成HTML页面..)

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

2 个答案:

答案 0 :(得分:1)

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

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

但是,如果浏览器支持SOAP,则SOAP非常有限。

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

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

完全不同的问题是1.并发请求的同步和2.与服务器的客户端通信。对于后者,您可以查看Web套接字(下一个重要的事情)或旧的轮询。

如果您担心同一数据的并发编辑,则必须实施一种策略来判断是否可以合并编辑或是否必须拒绝编辑。客户需要处理此类情况并向用户提供审核,覆盖或还原等。

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

Servlet只是处理特定HTTP请求的Java类,通常绑定到某些URL路径。它们与PHP页面相当:在PHP中,Web服务器获取请求并搜索相应的PHP文件。然后它解析PHP脚本并返回响应。 Servlet也是如此,只是语法非常不同。 JSP主要是尝试为Java带来更多PHP-ish语法。在窗帘后面,它们被渲染成纯Java servlet。

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

答案 1 :(得分:0)

我建议您尝试使用websockets,因为连接在客户端和服务器之间是持久的,并且任何一个都可以随时发送消息。

您可以在服务器上使用Java实现websocket服务器,并在客户端上使用Javascript内置的websockets功能。

请查看https://www.websocket.org/以了解有关websockets的更多信息。