2011-07-21 106 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