我正在构建GWT应用程序。以前,每当我从网页上请求图像时,该请求都会转到客户端类,该类用于提供图像。这适用于GWT生成的URL以及编译后的独立文件URL。

但是现在我已经用对服务器的Ajax(RPC)调用替换了该部分,其中服务器端类正在从客户端类接收必要的参数,并提供图像,该图像由客户端类发送到UI 。这与GWT生成URL的效果很好,但是在编译后,当我尝试将其作为独立HTML运行时(通过在URL栏中提供文件的路径),则不会触发Ajax请求。

是因为RPC调用需要服务器来响应(与jQuery Ajax调用相反,jQuery Ajax调用仅在桌面上运行良好)?如何在桌面模式下也模仿Ajax行为?呼叫看起来像这样:

private final GreetingServiceAsync response = GWT.create(GreetingService.class); //(I haven't changed the defualt names..:))
response.greetServer(i, j,new AsyncCallback<String,String>() {  // i,j is already calculated, server needs to know these to pass an image url
     public void onSuccess(String url1, String url2) {...}
     public void onFailure(Throwable caught) {...}
});

最佳答案

您完全脱离了GWT structure

编译完项目后,所有GWT代码都将隐藏到JavaScript中。

即使没有服务器在运行,并且您是否从文件系统(例如C://myapp/myapp.html)访问了html文件。浏览器将其用作静态网站

该html页面内的..ofcourse页面将有您的app.nochahe.js这是纯javascript。

因此,浏览器会毫不犹豫地显示所有内容。但是它永远不会成为所谓的Web应用程序,也不会制造任何ajax或任何其他服务器

呼叫。

在您的情况下,您没有运行任何服务器并以static pages的身份访问它们,并希望它们连接server并带来您的数据,这是完全不可能的。

因此,首先请在开发模式下运行||调试代码。

开始运行或调试项目后,在“开发模式”选项卡中生成的url将如下所示。

h t t p : / / localhost : 8888 / MyModule.html ? gwt.codesvr = localhost : 9997


您可能对参数gwt.codesvr有疑问。

它运行您的客户端Java代码,该代码已编译为类文件,但尚未编译为JavaScript文件。

实施完成后,编译项目并在任何服务器上导出war文件夹以测试或访问它们,并将其作为

ex:localhost:8080/myapp/someservice.


进入所谓的AJAX调用,它们是GWT中的RPC。RPC是用于与服务器通信的GWT内部结构,通常它们通常都是impl类,它们扩展了RemoteServiceServlet,后者将数据提供给客户端HTTP协议,并且在不运行服务器的情况下无法调用它们。

如果您仍然对不同的GWT应用程序模式感到困惑,请参阅此差异link

09-30 14:46
查看更多