2011-07-21 105 views
1

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

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

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); 
} 

回答

3

你试过从servlet映射删除/kuss_projekt,使之:

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

GWT客户期待的服务是提供通过@RemoteServiceRelativePath定义的URL。当您在浏览器中运行时,路径将相对于您的模块基址进行解析。正如你所给出的:

@RemoteServiceRelativePath("SpeicherService") 

客户端将通过连接

GWT.getModuleBaseURL() + "SpeicherService" 

如果你的servlet没有在这个URL映射,请求将无法做出请求作出的URL。尝试在控制台上打印GWT.getModuleBaseURL()+ "SpeicherService"以查看测试用例中的基本URL。一旦你有这个,打开浏览器并转到该网址。如果响应表示“Get方法不受支持”,则所有内容都正确映射。在另一方面,如果你得到一个404你必须去解决你的servlet映射

+0

谢谢您的帮助。它是由插件自动构建的,所以我认为它必须是正确的。 我尝试了请求并得到了404响应。所以我修复了我的servlet映射,现在找到了服务。但是,我得到以下异常: [错误] [kuss_projekt]第6行:没有源代码可用于com.google.gwt.user.server.rpc.RemoteServiceServlet类型;你忘了继承一个必需的模块吗? 但我有代码。怎么了? Sry,但我是新来的,从来没有与Servlets和这个工作。 – ph09

+0

@ ph09,接受答案并发布一个新问题。在stackoverflow答案和评论应该保持专注于单个问题。 –

+0

我仍然有我得到这个问题: [WARN]找不到文件:/ kuss_projekt/SpeicherService 我过度扩张... – ph09

2

您的应用程序的XML文件包含

<module rename-to='kuss_projekt'> 
+0

<?XML版本= “1.0” 编码= “UTF-8”?> 那就是我的Kuss_Projekt.gwt.xml文件。 这个改变是什么? – ph09

+0

在我的情况下,它是这个答案的组合(包含一个具有区分大小写错误的重命名的.xml文件)和上面的答案。 – Mercious