正如您已经发现的那样,解决这个常见问题有许多方法。
SOAP(有时称为“Web服务”或“WS *”)是一种应用于应用程序通信的标准。它的优势在于精确的规范(因此有许多良好的库),通过WSDL共享客户端和服务器的接口以及可发现性。
但是,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 Sockets(下一个大事)或老式轮询。如果同时编辑相同的数据是一个问题,您将不得不实现某种策略来告诉是否可以合并编辑还是必须拒绝其中之一。客户端将需要处理这种情况并提供用户审查、覆盖或还原等选项。
编辑:更多关于Java servlets和JSP的内容
Servlets只是处理特定HTTP请求的Java类,通常绑定到某些URL路径。它们类似于PHP页面:在PHP中,Web服务器获取请求并搜索相应的PHP文件。然后解析PHP脚本并返回响应。Servlets也是这样做的,只是语法非常不同。JSP主要是尝试将更多的PHP式语法带到Java中。在幕后,它们被渲染为纯Java servlets。
Java Servlets有着悠久的历史,比AJAX还要古老,但许多框架已经接受了在服务器上实现灵活资源处理的挑战。最值得注意的是Jersey和RESTEasy,它们是Java EE标准JAX-RS的实现;以及Spring,它是一个基于请求的框架,与Java EE标准竞争激烈。然后还有JSF,有时被称为JSP的继任者。对于用户来说,它与JSP几乎没有区别,但语法更好,我认为它比JSP更具功能。特别是考虑到像PrimeFaces这样的扩展。与JSP相比,JSF拥抱AJAX,并且许多内置组件能够使用AJAX与服务器通信,包括调用Java函数和重新渲染页面的部分。