【发布时间】:2011-07-21 08:15:41
【问题描述】:
我使用 GWT Maven 插件(2.3.0 版)生成了一个 GWT 项目。这样做的好处是 Maven 插件负责生成服务的异步部分。一切似乎都正常,但在托管模式下运行(在 Jetty 中运行)和将生成的 WAR 部署到 Tomcat 时,servlet 都没有响应。
我现在的问题是 servlet 根本没有响应。调用了onSuccess() 回调,但我得到的只是null 值。我几乎从 GWT 主页复制了教程,所以我的服务是这样创建的:
final StatusServiceAsync statusService = GWT.create(StatusService.class);
这是我的服务接口:
@RemoteServiceRelativePath("status")
public interface StatusService extends RemoteService
{
String getStatus(String someInput);
}
如前所述,异步对应项是由 Maven 插件生成的。 web.xml 如下所示:
<servlet>
<servlet-name>statusServlet</servlet-name>
<servlet-class>my.package.StatusServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>statusServlet</servlet-name>
<url-pattern>/StatusBoard/status</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>StatusBoard.html</welcome-file>
</welcome-file-list>
起初,我认为配置完全错误,所以我尝试了一下。当我更改<servlet-class> 值时,servlet 容器记录了ClassNotFoundException。然后我更改了@RemoteServiceRelativePath 我也得到了一个错误。所以配置不能全错。
这是服务器端代码(我将其剥离以确保没有其他问题):
public class StatusServiceImpl extends RemoteServiceServlet implements StatusService
{
private static final long serialVersionUID = 3317511632727461036L;
@Override
public String getStatus(final String someInput)
{
return someInput;
}
}
抱歉,我忘记了这个细节,但有时,调试器无法识别 servlet 中的断点。但即使这样,返回的值仍然是null。
非常感谢任何想法!
【问题讨论】:
-
以防万一:您的 servlet 是否继承自 RemoteServiceServlet 并实现了 StatusService?
-
您可以使用 Firebug(用于 Firefox)来嗅探请求/响应(网络选项卡)并检查请求和响应。我可以将您的请求/响应与我的项目进行比较以查看差异...
-
是的,servlet 确实继承自 RemoteServiceServlet 并实现了服务接口。
-
您的 GWT 模块是否命名为“StatusBoard”,或者您是否设置了“重命名为”名称?
-
@Jason 和 Robert:你们中的一个人应该将其发布为答案,然后 Robert 应该将其标记为已接受。罗伯特:在标题中加上“[已解决]”并不是表明问题已被接受的答案的正确方式。