GWT:Servlet URL映射给出404错误

时间:2011-07-11 23:30:27

标签: eclipse gwt servlets

我已阅读其他GWT Servlet问题,但我仍无法解决问题。我的包名为Maps,它有一个名为MyService的服务(根据GWT教程设置)。 web.xml文件包括以下内容:

<servlet>
    <servlet-name>MyServiceImpl</servlet-name>
    <servlet-class>com.xerox.maps.maps.server.MyServiceImpl</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>MyServiceImpl</servlet-name>
    <url-pattern>/Maps/service</url-pattern>
</servlet-mapping>

在MyService中,我有一行:

@RemoteServiceRelativePath("service")
public interface MyService extends RemoteService { ...

但是,当我尝试进行RPC调用时,会抛出一个错误。错误的详细信息表明它是404 HTTP错误。我该如何解决这个问题,以确保映射是正确的?

编辑7.27

MyService.java包含注释:

@RemoteServiceRelativePath("service")

web.xml包含:

<servlet-name>MyServiceImpl</servlet-name>
<url-pattern>/com.x.maps.Maps/service</url-pattern>

如果我使用FireBug跟踪XHR,它会告诉我有一个对com.x.maps.Maps的调用

4 个答案:

答案 0 :(得分:5)

当GWT错误地推断出服务端点路径时,通常会抛出404未找到。尝试删除@RemoteServiceRelativePath("service")并重新编译并检查,如果不起作用,请手动找到服务的URL端点(通过从浏览器点击可能的路径,直到错误更改为500内部错误)然后给出正确的路径@RemoteServiceRelativePath("correct/path")的论点。我会立即尝试的几项试验是@RemoteServiceRelativePath("/Maps/service")@RemoteServiceRelativePath("Maps/service")没有斜线

答案 1 :(得分:4)

根据本教程: https://developers.google.com/web-toolkit/doc/latest/tutorial/RPC

servlet-mapping应该由模块“rename-to”和服务“RemoteServiceRelativePath”组成。因此,如果您在* .gwt.xml文件中有以下行:

<module rename-to='XXX'>

在您的* Service.java文件中,您有以下行:

@RemoteServiceRelativePath("YYY")

然后,在“web.xml”文件中,您应该具有以下行:

  <servlet-mapping>
    <servlet-name>...servlet-name>
    <url-pattern>/XXX/YYY</url-pattern>
  </servlet-mapping>

答案 2 :(得分:1)

所有评论后的新答案:

很酷,你取得了进步! 你正在点击这个网址 -

http://127.0.0.1:8888/com.x.maps.maps.Maps

使用此POST数据我假设 - /%7C98544A4AED8C7D42E80C55859E9CEC4C%7Ccom.x.maps.maps.client.MyService%7CreadFile%7Cjava.lang.String/2004016611%7CPrinterList.xls%7C1%7C2%7C3%7C4%7C1%7C5%7C6%7C

这就是问题所在,您的servlet被映射为响应来到<url-pattern>/Maps/service</url-pattern>的XHR请求,但您正在点击/com.x.maps.maps.Maps。因此,您将获得404路径未找到状态代码。

Alter the url-pattern on the server-side web.xml to match what the browser is making,
OR
Alter the GWT code using the RemoteServiceRelativePath annotation to make the request to /Maps/service instead of to /com.x.maps.maps.Maps

答案 3 :(得分:1)

我遇到了同样的问题,但我解决了它在web.xml中更改Servlet的url-pattern

尝试在web.xml中输入生成GWT javascript模块的目录的路径,在WEB-INF / deploy后面。就我而言:

<url-pattern>/gwtmodulemain/selection</url-pattern>

您还可以在gwt.xml文件中重命名模块名称:

<module rename-to='gwtmodulemain'>

因此您可以通过以下方式从HTML中引用模块:

<script type="text/javascript" language="javascript" src="gwtmodulemain/gwtmodulemain.nocache.js"></script>
祝你好运!