【问题标题】:Servlet NOT_FOUND (GWT+AppEngine)未找到 Servlet (GET+App Engine)
【发布时间】:2010-06-17 14:02:04
【问题描述】:

我想开发我的第一个 AppEngine 应用程序,它也将使用 GWT。由于我对 GWT 和 AppEngine 没有任何经验,所以我从 GWT 网站上的教程开始,在成功完成入门后,我开始研究 http://code.google.com/webtoolkit/doc/latest/tutorial/appengine.html

但是我遇到了一个问题,我不知道为什么:)

我正在尝试检查用户是否已登录,例如教程的“使用用户服务个性化应用程序”部分。

但是当我运行代码本身时,我得到一个错误:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>Error 404 NOT_FOUND</title>
</head>
<body><h2>HTTP ERROR 404</h2>
<p>Problem accessing /parkmeweb/login. Reason:
<pre>    NOT_FOUND</pre></p><hr /><i><small>Powered by Jetty://</small></i><br/>                                                
</body>
</html>

这是我的文件:

登录服务

@RemoteServiceRelativePath("login")
public interface LoginService extends RemoteService {
  public LoginInfo login(String requestUri);
}

LoginServiceAsync

public interface LoginServiceAsync {
  public void login(String requestUri, AsyncCallback<LoginInfo> async);
}

LoginServiceImpl

public class LoginServiceImpl extends RemoteServiceServlet implements
        LoginService {

    public LoginInfo login(String requestUri) {
        UserService userService = UserServiceFactory.getUserService();
        User user = userService.getCurrentUser();
        LoginInfo loginInfo = new LoginInfo();

        if (user != null) {
            loginInfo.setLoggedIn(true);
            loginInfo.setEmailAddress(user.getEmail());
            loginInfo.setNickname(user.getNickname());
            loginInfo.setLogoutUrl(userService.createLogoutURL(requestUri));
        } else {
            loginInfo.setLoggedIn(false);
            loginInfo.setLoginUrl(userService.createLoginURL(requestUri));
        }
        return loginInfo;
    }

}

web.xml

    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

  <!-- Servlets -->

  <servlet>
    <servlet-name>loginService</servlet-name>
    <servlet-class>com.parkme.parkmeweb.server.LoginServiceImpl</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>loginService</servlet-name>
    <url-pattern>/parkmeweb/login/</url-pattern>
  </servlet-mapping>

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

</web-app>

所有这些都是我从onModuleLoad 打来的:

public void onModuleLoad() {
    LoginServiceAsync loginService = GWT.create(LoginService.class);
    loginService.login(GWT.getHostPageBaseURL(), new AsyncCallback<LoginInfo>() {
      public void onFailure(Throwable error) {
             //this is where error is thrown
          Window.alert(error.getMessage());
      }

      public void onSuccess(LoginInfo result) {
        loginInfo = result;
        if(loginInfo.isLoggedIn()) {
          return;
        } else {
          loadLogin();
        }
      }
    });
}

仅仅看这个,我看不出任何问题,我可能应该在其他地方寻找问题,但我想听听一些想法是哪里出了问题。

【问题讨论】:

    标签: java google-app-engine gwt login


    【解决方案1】:

    处理程序用于 /parkmweweb/login/,但您正在访问 /parkmeweb/login - 没有尾部斜杠。

    【讨论】:

    • 我不熟悉 GWT,但您定义了一个名为“登录”的函数,而不是在任何地方调用它。 login 应该如何调用? app.yaml 中提到的处理程序必须是一个 servlet,并在其上调用标准 servlet 方法来处理请求。
    • 谢谢,这对我也有帮助! (尾部斜杠)。这是正确答案
    【解决方案2】:

    面临同样的问题。但我试图将它部署到谷歌。 servlet 是可访问的,没有问题。看起来像是 GWT + Eclipse 的问题,不确定到底在哪里。希望他们能修复它,否则很难进行明智的测试。

    【讨论】:

      【解决方案3】:

      我刚刚重新启动了 Eclipse 并解决了问题。

      当我从 jre1.7 切换到 x64 的 jre1.6 时,问题就开始了。

      【讨论】:

        猜你喜欢
        • 2014-01-20
        • 2016-11-30
        • 2023-03-11
        • 1970-01-01
        • 2017-12-03
        • 2016-05-21
        • 2010-10-27
        • 2012-10-15
        • 2011-03-18
        相关资源
        最近更新 更多