Gwt ServiceAsync接口背后的底层技术是什么?

Gwt ServiceAsync接口背后的底层技术是什么?,gwt,client-server,Gwt,Client Server,我开发了一个web应用程序(工作正常),它将用户注册到系统中,并允许用户通过https将文件上传到系统中。客户端代码完全是使用GWT2.4开发的,后端是几个servlet。除了上传代码外,所有客户机-服务器通信都是通过使用ServiceAsync接口完成的,因为这是GWT中的常见做法。上载代码基于与上载servlet直接通信的表单 这个项目是作为一门课程开发的,我的教授很想了解GoogleWebToolkit的底层架构,特别关注客户机-服务器通信。他的问题是 “客户端代码如何知道服务器的url,

我开发了一个web应用程序(工作正常),它将用户注册到系统中,并允许用户通过https将文件上传到系统中。客户端代码完全是使用GWT2.4开发的,后端是几个servlet。除了上传代码外,所有客户机-服务器通信都是通过使用
ServiceAsync
接口完成的,因为这是GWT中的常见做法。上载代码基于与上载servlet直接通信的表单

这个项目是作为一门课程开发的,我的教授很想了解GoogleWebToolkit的底层架构,特别关注客户机-服务器通信。他的问题是

“客户端代码如何知道服务器的url,以便完成所有通信?”

他的问题对于
ServiceAsync
接口来说是合理的。我在服务器端调用一个函数,他对此很感兴趣,他想知道它背后的底层过程

对于上传,我刚刚定义了
uploadForm.setAction(GWT.getModuleBaseURL()+“upload”)其中upload是web.xml中上载servlet的名称

我告诉他,编译器生成Javascript代码,其中包含所有web应用程序代码(整个系统动态开发),servlet的url放在该脚本文件中,但答案并不让他满意。请让我知道客户机-服务器与GWT通信的内部事实


请给我一些答案,帮助我的教授理解GWT的异步客户端到服务器RPC通信。

GWT中有多种方法可以将RPC服务绑定到特定url。 第一个是放置在同步接口上的注释@RemoteServiceRelativePath。使用延迟绑定规则GWT将发现此URL并自动将其设置为服务实例

第二个是将GWT-RPC异步服务的实例强制转换为ServiceDefTarget并手动设置url


但是这个答案本身并不能让你的教授满意,因为他很可能想知道一些其他的细节,所以我建议你学习GWT-RPC到底是如何工作的

底层技术如图所示。“GWT提供了一种基于Java Servlet的RPC机制,以提供对服务器端资源的访问。该机制包括生成高效的客户端和服务器端代码,以便使用Java Servlet在网络上序列化对象。”

客户机知道要查询的URL,因为您应该使用
@remoteservicereparatePath
标记对服务接口进行注释。这将服务与相对于模块基URL的默认路径相关联。该URL是Javascript发送请求的位置


如果你愿意的话,关于GWT的RPC还有很多需要了解的地方,你可以开始把它分开来。

关于客户端如何知道服务器url的基本问题,听起来教授可能在询问站点的完整url(域名),不仅仅是@RemoteServiceRelativePath和web.xml中定义的服务子目录


对于这个更基本的问题,我认为浏览器对javascript安全性的“同源策略”(SOP)可能是答案的重要部分。这是GWT常见问题之一。浏览器在客户端所做的第一件事(在HTTPS连接建立之后,我认为这可能是答案的另一个重要部分)是读取主机html文件,其中引用了bootstrap nocache.js文件。加载此文件后,SOP将保证所有后续JS应用程序文件都来自与引导和主机html文件相同的服务器。一旦加载了应用程序文件,那么所有事情都会在该上下文中发生,如前所述,为RPC定义了特定的内部url路径。

这就是我忘记的!我本可以提到@RemoteServiceRelativePath,这会让事情变得更清楚。谢谢你的回复!