2

我一直在研究 Google 开发人员网站上的 GWT 教程,并在此处了解了 GWT RPC 部分。问题的主旨是我仔细按照教程上的说明进行操作,在 Eclipse Juno 上以开发模式运行代码时遇到了问题。错误是:“此 URL 不支持错误 405 HTTP 方法 GET”。

我所处的环境是:

  • 日食朱诺 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 实现。

如果有人对问题可能是什么有任何建议,我会全力以赴。或者对错误含义的另一种解释对我和其他任何遇到此问题的人都有帮助。

编辑:

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

4

1 回答 1

4

StockPriceServlet应该是扩展的RemoteServiceServlet,仅用于 RPC 调用,因此不支持GET. 不要将浏览器定向到该 url,而是使用应用程序中提供的 html 文件。实际的 url 应该显示在开发模式控制台上。在https://developers.google.com/web-toolkit/doc/latest/tutorial/gettingstarted教程中,这在https://developers.google.com/web-toolkit/doc/latest/的第 2 步中进行了描述tutorial/create - url 将是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 的更多详细信息 - 仅在客户端代码中。

于 2012-10-11T04:09:45.513 回答