2011-07-11 105 views
6

我已經閱讀了其他GWT Servlet問題,但我仍然無法解決我的問題。我的軟件包叫做Maps,它有一個名爲MyService的服務(根據GWT教程設置)。 web.xml文件包括以下內容:GWT:Servlet URL映射給出了404錯誤

<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

你有鏈接到教程?我一直在GWT最近編碼並能夠幫助(如果我看不到了。問題:)) – user710502

+0

當然:我一直在使用[這一個](http://代碼。主要以及[此其他教程](http://code.google.com/webtoolkit/doc/latest/DevGuideServerCommunication.html#DevGuideRPCDeployment)。謝謝! – simchona

+0

你如何在xml文件中設置入口點?你使用rpc.AsyncCallback? – user710502

回答

4

404當通過GWT錯誤地推斷服務端點路徑時,通常會拋出Not Found。嘗試刪除@RemoteServiceRelativePath("service")並重新編譯並檢查,如果不起作用,則手動查找服務的URL端點(通過從瀏覽器點擊可能的路徑,直到錯誤更改爲500內部錯誤),然後將正確的路徑作爲參數提供給@RemoteServiceRelativePath("correct/path")。很少有試驗所有的意見後,我會嘗試馬上就是@RemoteServiceRelativePath("/Maps/service")@RemoteServiceRelativePath("Maps/service")沒有斜槓

+0

如何在http://127.0.0.1:8888/Maps.html?gwt.codesvr=127.0.0.1:9997加載代碼時更改路徑? – simchona

+0

你有沒有嘗試刪除RemoteServiceRelativePath註釋?並回答你的問題,關於如何更改路徑:使用Firebug Net面板並轉到XHR部分(XmlHttpRequests),首先找出正在做什麼請求以及到哪個路徑。知道這一點,將GWT.create()返回的對象轉換爲RemoteServiceProxy並調用setServiceEndpoint()方法,使用正確的路徑或正確的服務端點 – Zasz

+0

我嘗試刪除註釋 - 是否應該匹配標記?我不確定什麼是螢火蟲。我正在使用Eclipse。我很抱歉,這讓我花了很長時間纔得到,但GWT和servlets對我來說非常新穎。 – simchona

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 
+0

明天我會試試這個。感謝您真的耐心等待 - 我知道這可能是多麼的乏味 – simchona

+1

不用擔心,配置總是令人頭痛,直到你得到它的工作:) – Zasz

+0

好吧,我正在編輯我的問題,以顯示最新的配置。我試圖編輯url模式,但我的404仍然存在。 – simchona

1

我有同樣的問題,但我解決它改變了Servlet的URL模式在web.xml

嘗試把你的web.xml中的目錄路徑您的GWT在WEB-INF/deploy之後生成javascript模塊。在我的情況:

<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> 

祝你好運!

4

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

該servlet映射應該由該模塊的「重命名到」與服務「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>