未找到 GWT RPC 服务

Posted

技术标签:

【中文标题】未找到 GWT RPC 服务【英文标题】:GWT RPC Service not found 【发布时间】:2011-07-21 11:11:10 【问题描述】:

我几乎在网上搜索了几个小时,但没有找到答案。 问题是我想测试 gwt RPC。 所以我用 Eclipse 插件生成了一个 GWT 远程服务。 但每次我得到以下失败:“[WARN] No file found for: /kuss_projekt/SpeicherService”

我尝试了很多,但我不知道是什么问题。 这是我的代码:

web.xml:
<web-app>

<servlet>
    <servlet-name>SpeicherService</servlet-name>
    <servlet-class>de.fhdo.kuss.server.SpeicherServiceImpl</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>SpeicherService</servlet-name>
    <url-pattern>/kuss_projekt/SpeicherService</url-pattern>
</servlet-mapping>

<!-- Default page to serve -->
<welcome-file-list>
    <welcome-file>Kuss_Projekt.html</welcome-file>
</welcome-file-list>


</web-app>

-

Speicherservice:
@RemoteServiceRelativePath("SpeicherService")
public interface SpeicherService extends RemoteService 

String getName(String name);


public static class Util 
    private static SpeicherServiceAsync instance;
    public static SpeicherServiceAsync getInstance()
        if (instance == null) 
            instance = GWT.create(SpeicherService.class);
        
        return instance;
    


-

SpeicherServiceAsync:
public interface SpeicherServiceAsync 

void getName(String name, AsyncCallback<String> callback);


-

SpeicherServiceImpl
public class SpeicherServiceImpl extends RemoteServiceServlet implements SpeicherService 

@Override
public String getName(String name) 
    return("Server meldet sich " + name);


-

Test():
    public void test() 
    AsyncCallback<String> callback = new AsyncCallback<String>() 

        @Override
        public void onFailure(Throwable caught) 
            // TODO Auto-generated method stub
        

        @Override
        public void onSuccess(String result) 
            Window.alert(result);
        
    ;

    SpeicherService.Util.getInstance().getName("test",callback);

【问题讨论】:

【参考方案1】:

您是否尝试过从 servlet 映射中删除 /kuss_projekt 来实现:

<servlet-mapping>
    <servlet-name>SpeicherService</servlet-name>
    <url-pattern>/SpeicherService</url-pattern>
</servlet-mapping>

GWT 客户端期望该服务在通过@RemoteServiceRelativePath 定义的 URL 上可用。当您在浏览器中运行时,路径是相对于您的模块基本 url 解析的。正如你所给出的:

@RemoteServiceRelativePath("SpeicherService")

客户端将向连接的 URL 发出请求

GWT.getModuleBaseURL() + "SpeicherService"

如果您的 servlet 未映射到此 url,则请求将失败。尝试在控制台上打印 GWT.getModuleBaseURL()+ "SpeicherService" 以查看测试用例中的基本 url 是什么。获得此信息后,打开浏览器并转到该网址。如果响应显示“不支持获取方法”之类的内容,则所有内容都已正确映射。另一方面,如果您收到404,则必须修复您的 servlet 映射

【讨论】:

感谢您的帮助。它是由插件自动构建的,所以我认为它必须是正确的。我尝试了请求并得到了 404 响应。所以我修复了我的 servlet 映射,现在已经找到了服务。但后来我得到以下异常: [错误] [kuss_projekt] 第 6 行:没有源代码可用于类型 com.google.gwt.user.server.rpc.RemoteServiceServlet;你忘了继承一个必需的模块吗?但是我有代码。怎么了?对不起,但我是新手,从来没有使用过 Servlet 和这个。 @ph09,接受答案并发布新问题。在 *** 中,答案和 cmets 应该专注于一个问题。 我仍然遇到以下问题:[WARN] No file found for: /kuss_projekt/SpeicherService 我过度扩展...【参考方案2】:

您的应用程序 xml 文件是否包含

<module rename-to='kuss_projekt'>

【讨论】:

这在我的 Kuss_Projekt.gwt.xml 文件中。这有什么变化? 在我的情况下,它是这个答案(.xml 文件包含一个有区分大小写错误的重命名)和上面的答案的组合。

以上是关于未找到 GWT RPC 服务的主要内容,如果未能解决你的问题,请参考以下文章

GWT RPC“未找到 404”错误。如何让 RPC 在您自己的 Apache 服务器上工作?

GWT RPC 未生成正确的 gwt.rpc 文件

将泛型与 GWT-RPC 一起使用未按预期工作

GWT:在另一个模块中调用 RPC 服务

GWT RPC 回调未在 onModuleLoad 中执行

使用 RPC 服务创建 GWT.create 的目的是啥?