2011-07-21 46 views
1

我使用了GWT Maven插件(版本2.3.0)来生成GWT项目。关于这一点的好处是,Maven插件负责生成服务的异步部分。一切似乎都正常,但在托管模式下运行(在Jetty中运行)以及将生成的WAR部署到Tomcat时,Servlet无法响应。Maven生成的GWT 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

任何想法非常感谢!

+0

以防万一:您的servlet是否从RemoteServiceServlet继承并实现了StatusService? – helios

+0

您可以使用Firebug(用于Firefox)来嗅探请求/响应(网络选项卡)并检查请求和响应。我可以将您的请求/响应与我的项目进行比较,以查看差异... – helios

+0

是的,Servlet确实继承了RemoteServiceServlet并实现了服务接口。 – RobertB

回答

1

默认情况下,您的GWT应用程序具有来自模块名称的基本URL。如果您在gwt.xml文件中使用了“重命名”属性,那么该值将成为您的基本URL。在这种情况下,查看你的web.xml条目,你的模块应该被命名为“StatusBoard”。或将您的网址更改为“重命名”值。