GWT RPC的Google示例在Eclipse中返回HTTP错误405

时间:2012-10-11 04:00:26

标签: eclipse gwt ubuntu-12.04 gwt-rpc

我一直在Google的开发者网站上完成GWT教程,并且已经了解了GWT RPC here部分。问题的关键在于我仔细遵循了教程中的说明,并且在Eclipse Juno上以开发模式运行代码时遇到了问题。错误是:“错误405 HTTP方法GET不受此URL支持”。

我所处的环境是:

  • Eclipse Juno 4.2
  • Ubuntu 12.04 LTS(最近没有重大更新。)
  • 使用默认GWT SDK(GWT - 2.4.0)。
  • 使用默认GAE SDK(App Engine - 1.7.2)。
  • Chrome版本21.0.1180.89

引用示例中的代码,我开始关注web.xml文件和servlet-mappings作为问题的一部分。我在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>

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

      <!-- Servlets -->
      <servlet>
        <servlet-name>stockPriceServiceImpl</servlet-name>
        <servlet-class>com.google.gwt.sample.stockwatcher.server.StockPriceServiceImpl</servlet-class>
      </servlet>

      <servlet-mapping>
        <servlet-name>stockPriceServiceImpl</servlet-name>
        <url-pattern>/stockwatcher/stockPrices</url-pattern>
      </servlet-mapping>

  </web-app>

好处是服务器正在查找代码,但在查找代码和呈现代码之间,它会失败。

我已经非常彻底地研究过这个问题了,我还没有找到任何似乎指出问题原因的东西。我所知道的是以下内容:

  1. 需要更好地理解HttpServlet类。
  2. GWT应该关注doPost和doGet实现。
  3. 如果有人对这个问题有什么建议,我会全力以赴。或者对错误意味着什么的另一种解释对我和其他有此问题的人都有帮助。

    编辑:

    我能够解决我的问题,部分原因归功于Colin Alworth。问题是我如何考虑访问servlet。浏览HTML页面确实是访问应用程序的正确方法,因为我没有调用启动AsyncCallback方法的方法(不知何故我错过了),看起来HTML页面和servlet已经断开连接。

1 个答案:

答案 0 :(得分:4)

StockPriceServlet应该扩展RemoteServiceServlet,这仅适用于RPC调用,因此不支持GET。不要将浏览器定向到该URL,而是使用应用程序中提供的html文件。实际网址应显示在开发模式控制台上。在https://developers.google.com/web-toolkit/doc/latest/tutorial/gettingstarted教程中,https://developers.google.com/web-toolkit/doc/latest/tutorial/create上的步骤2中对此进行了描述 - 网址为http://localhost:8888/StockWatcher.html,或者,如果使用开发模式http://localhost:8888/StockWatcher.html?gwt.codesvr=localhost:9997则更有可能。在web.xml中,您甚至不需要列出html文件本身:

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

http://localhost:8888/?gwt.codesvr=localhost:9997就足够了。

Servlet并不总是用于提供html,这是其中一种情况 - 这种类型的servlet的明确目的是让GWT客户端通过传递与服务器上的Java方法交互的方式来回的物体。查看https://developers.google.com/web-toolkit/doc/latest/tutorial/RPC以获取有关如何使用此servlet的更多详细信息 - 仅在客户端代码中。