2011-07-21 49 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」。或將您的網址更改爲「重命名」值。