7

不要连接到服务器...这是上次gwt eclipse中的一个项目

单击 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

该怎么办?

4

1 回答 1

7

在您的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 接口期望的默认 url
  2. 配置远程服务以从您的自定义路径加载

这两个都在https://developers.google.com/web-toolkit/doc/latest/DevGuideServerCommunication以及其他 RPC 设置详细信息进行了简要讨论。

对于第二个选项,这通常如下所示:

MyServiceAsync service = GWT.create(MyService.class);
((ServiceDefTarget)service).setServiceEntryPoint("/hello123/greet");
service.methodName(...
于 2012-06-27T21:39:32.447 回答