2012-06-27 173 views
6

不要連接到服務器...它在過去的GWT項目日食GWT警告:未找到文件:/com.mycompany.project.ImageViewer/GreetingService

上點擊按鈕,GWT:

greetServer(textToServer, 
         new AsyncCallback<String>() { 
          public void onFailure(Throwable caught) { 
           // Show the RPC error message to the user 
           dialogBox 
             .setText("Remote Procedure Call - Failure"); 
           serverResponseLabel 
             .addStyleName("serverResponseLabelError"); 
           serverResponseLabel.setHTML(SERVER_ERROR); 
           dialogBox.center(); 
           closeButton.setFocus(true); 
          } 

          public void onSuccess(String result) { 
           dialogBox.setText("Remote Procedure Call"); 
           serverResponseLabel 
             .removeStyleName("serverResponseLabelError"); 
           serverResponseLabel.setHTML(result); 
           dialogBox.center(); 
           closeButton.setFocus(true); 
          } 
         }); 

我的GWT服務器:

public String greetServer(String input) throws IllegalArgumentException { 
     // Verify that the input is valid. 
     if (!FieldVerifier.isValidName(input)) { 
      // If the input is not valid, throw an IllegalArgumentException back to 
      // the client. 
      throw new IllegalArgumentException(
        "Name must be at least 4 characters long"); 
     } 

     String serverInfo = getServletContext().getServerInfo(); 
     String userAgent = getThreadLocalRequest().getHeader("User-Agent"); 

     // Escape data from the client to avoid cross-site script vulnerabilities. 
     input = escapeHtml(input); 
     userAgent = escapeHtml(userAgent); 

     return "Hello, " + input + "!<br><br>I am running " + serverInfo 
       + ".<br><br>It looks like you are using:<br>" + userAgent; 
    } 

這是我的GWT者地位:

@RemoteServiceRelativePath("greet") 
public interface GreetingService extends RemoteService { 
    String greetServer(String name) throws IllegalArgumentException; 
} 

GWT serviseAsyn文件:

public interface GreetingServiceAsync { 
    void greetServer(String input, AsyncCallback<String> callback) 
      throws IllegalArgumentException; 
} 


web xml 

    <!-- Servlets --> 
    <servlet> 
    <servlet-name>greetServlet</servlet-name> 
    <servlet-class>kill.server.GreetingServiceImpl</servlet-class> 
    </servlet> 

    <servlet-mapping> 
    <servlet-name>greetServlet</servlet-name> 
    <url-pattern>/hello123/greet</url-pattern> 
    </servlet-mapping> 

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

上點擊按鈕 - 服務器沒有返回值,因爲沒有找到文件 - 爲什麼?

Jun 27, 2012 11:12:13 AM com.google.appengine.tools.development.LocalResourceFileServlet doGet 
WARNING: No file found for: /com.mycompany.project.ImageViewer/GreetingService 

該怎麼辦?

回答

6

在你web.xml文件映射你的服務爲/hello123/greet

<servlet-mapping> 
    <servlet-name>greetServlet</servlet-name> 
    <url-pattern>/hello123/greet</url-pattern> 
</servlet-mapping> 

而錯誤表明它試圖加載的/modulename/serviceinterfacename,或/ com.mycompany.project.ImageViewer/GreetingService默認。有兩種選擇:

  1. 更改web.xml項使用RPC接口預計
  2. 配置遠程服務的默認網址從您的自定義路徑

論文的兩個簡要討論加載在https://developers.google.com/web-toolkit/doc/latest/DevGuideServerCommunication,以及其他RPC設置細節。

對於第二個選項,這通常是這樣的:

MyServiceAsync service = GWT.create(MyService.class); 
((ServiceDefTarget)service).setServiceEntryPoint("/hello123/greet"); 
service.methodName(...