我们想说我想创建一个协作式Web应用程序,用户可以同时处理例如一张图。我在客户端有我的交互式网站(HTML / CSS / JavaScript),让我们说一个Java应用程序在服务器端同步一个集中模型。 客户端和服务器如何交换消息?为了更好地了解系统应该如何工作,这里有一些细节和一个小例子:
以下是我所看到的一些解决方案,从(imho)排名最合适到最不合适,我不确定该列表是否完整且我的所有假设都是正确的。
使用javax.jws
的Java Web服务 - 该服务将提供由WSDL描述的API,并且能够使用HTTP协议响应SOAP消息,但JavaScript可以处理这些消息吗?
Servlets& Java服务器页面(JSP) - 据我所知,需要页面重新加载来获取新内容(这与PHP几乎完全相同吗?两者都在服务器上执行以生成HTML页面..)
我已经找到this question但是,答案中没有提供具体的技术。感谢您的任何提示和澄清,我非常感谢!
答案 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的更多信息。