我已阅读其他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的调用
答案 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>
祝你好运!