我开发了一个Web应用程序(正常工作),它将用户注册到系统,并允许用户通过https将文件上传到系统。客户端代码完全是使用GWT 2.4开发的,后端是几个servlet。除了上传代码之外,所有客户端 - 服务器通信都是通过使用ServiceAsync
接口完成的,因为这是GWT中的常见做法。上传代码基于直接与上传servlet通信的表单。
这个项目是作为一门课程开发的,我的教授热衷于了解google web toolkit的基础架构,特别关注客户端 - 服务器通信。他的问题是,
“客户端代码如何知道服务器的URL以便完成所有通信?”
他的问题对于ServiceAsync
界面是合法的。我在服务器端调用一个函数,这对他来说很有趣,他想知道它背后的基础过程。
为了上传,我刚刚定义了uploadForm.setAction(GWT.getModuleBaseURL()+"upload");
,其中upload是web.xml中上传servlet的名称。
我告诉他编译器生成的Javascript代码包含所有Web应用程序代码(动态开发的整个系统),并且servlet的url放在该脚本文件中,但答案并不能满足他。请告诉我与GWT的客户端 - 服务器通信的内部事实。
请给我一些答案,以帮助我的教授理解GWT的异步客户端到服务器RPC通信。
答案 0 :(得分:1)
GWt中有多种方法可以将RPC服务绑定到特定的URL。 首先是注释@RemoteServiceRelativePath,它放在同步接口上。使用延迟绑定规则GWT将发现此URL并将其自动设置为服务实例。
其次是将GWT-RPC异步服务的实例转换为ServiceDefTarget并手动设置URL。
但是这个答案本身并不能满足你的教授,因为他很可能想知道其他一些细节,所以我建议你学习GWT-RPC的工作原理。
答案 1 :(得分:1)
基础技术是shown here作为图表。 Google says“GWT提供基于Java Servlets的RPC机制,以提供对服务器端资源的访问。这种机制包括生成有效的客户端和服务器端代码,以使用deferred binding在网络上序列化对象。”
客户端知道要查询的URL,因为您已使用@RemoteServiceRelativePath
标记注释了您的服务接口。这将服务与相对于模块基URL的默认路径相关联。该URL是Javascript发送请求的地方。