2011-07-11 12 views
6

Przeczytałem inne pytania dotyczące serwletu GWT, ale mam problem z rozwiązaniem mojego problemu. Mój pakiet nazywa się Maps i ma usługę o nazwie MyService (która została skonfigurowana zgodnie z samouczkiem GWT). Plik web.xml obejmuje:GWT: Mapowanie adresu URL serwletu daje błąd 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> 

W MyService, mam linię:

@RemoteServiceRelativePath("service") 
public interface MyService extends RemoteService { ... 

Jednak gdy próbuję nawiązać połączenie RPC, tam jest błąd rzucony. Szczegóły błędu informują, że jest to błąd HTTP 404. Jak mogę to naprawić, aby upewnić się, że mapowanie jest poprawne?

Edit 7,27

MyService.java zawiera adnotację:

@RemoteServiceRelativePath("service") 

I web.xml zawiera:

<servlet-name>MyServiceImpl</servlet-name> 
<url-pattern>/com.x.maps.Maps/service</url-pattern> 

Jeśli śledzę XHR z FireBug, to pokazuje mi że jest połączenie z com.x.maps.Maps

+0

czy masz link do tutoriala ?, i zostały kodowania w GWT ostatnio i może być w stanie pomóc (jeśli widzę. problem :)) – user710502

+0

Oczywiście: używałem [tego] (http: // kod. google.com/webtoolkit/doc/latest/tutorial/RPC.html), a także [ten inny samouczek] (http://code.google.com/webtoolkit/doc/latest/DevGuideServerCommunication.html#DevGuideRPCDeployment). Dzięki! – simchona

+0

W jaki sposób ustawiłeś punkt wejścia w pliku xml? i używasz rpc.AsyncCallback? – user710502

Odpowiedz

4

404 Nie znaleziono, generowane zwykle, gdy ścieżka punktu końcowego jest błędnie wnioskowana przez GWT. Spróbuj usunąć @RemoteServiceRelativePath("service") i ponownie skompilować i sprawdzić, jeśli to nie działa, ręcznie sprawdź punkt końcowy adresu URL usługi (poprzez trafienie prawdopodobnych ścieżek z przeglądarki, aż błąd zmieni się na 500 błędów wewnętrznych), a następnie podaj poprawną ścieżkę jako argument do @RemoteServiceRelativePath("correct/path"). Kilka prób chciałbym spróbować od razu JEST @RemoteServiceRelativePath("/Maps/service") i @RemoteServiceRelativePath("Maps/service") bez ukośnika

+0

Jak zmienić ścieżkę podczas ładowania kodu w http://127.0.0.1:8888/Maps.html?gwt.codesvr=127.0.0.1:9997? – simchona

+0

Czy próbowałeś usunąć adnotację RemoteServiceRelativePath? Aby odpowiedzieć na twoje pytanie, jak zmienić ścieżkę: Użyj panelu firebug Net i przejdź do sekcji XHR (XmlHttpRequests) i sprawdź najpierw, jakie wnioski są tworzone i do której ścieżki. Wiedząc o tym, odeślij obiekt zwrócony przez GWT.create() do RemoteServiceProxy i wywołaj na nim metodę setServiceEndpoint(), z poprawną ścieżką lub poprawnym punktem końcowym usługi – Zasz

+0

Próbowałem usunąć adnotację - czy powinien pasować do tagu ? I nie jestem pewien, czym jest firebug; Używam Eclipse. Przykro mi, że zabiera mi to tyle czasu, ale GWT i serwlety są dla mnie bardzo nowe. – simchona

1

Nowa odpowiedź po tych wszystkich komentarzy:

Cool, masz poczyniła postępy! jesteś uderzanie ten adres -

http://127.0.0.1:8888/com.x.maps.maps.Maps 

Z tych danych POST zakładam - /%7C98544A4AED8C7D42E80C55859E9CEC4C%7Ccom.x.maps.maps.client.MyService%7CreadFile%7Cjava.lang.String/2004016611%7CPrinterList.xls%7C1%7C2%7C3%7C4%7C1%7C5%7C6%7C

To gdzie jest problem, Twój aplet jest odwzorowany w odpowiedzi na żądania XHR przybywających do <url-pattern>/Maps/service</url-pattern> ale napotyka /com.x.maps.maps.Maps zamiast. W związku z tym otrzymujesz kod statusu nie znaleziony przez ścieżkę 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

Spróbuję jutro. Dziękuję za to, że jestem bardzo cierpliwy - wiem, jak nudne może być – simchona

+1

Bez obaw, konfiguracja zawsze jest bólem głowy, dopóki nie zadziała. :) – Zasz

+0

OK, edytuję moje pytanie, aby pokazać najnowsze konfiguracje. Próbowałem edytować wzorzec adresu URL, ale moje 404 trwa. – simchona

1

miałem ten sam problem, ale rozwiązać go zmieniając URL wzór Servlet w web.xml

spróbować umieścić w web.xml ścieżkę do katalogu, w którym swoją GWT moduł javascript jest generowany za WEB-INF/deploy. w moim przypadku:

<url-pattern>/gwtmodulemain/selection</url-pattern> 

Można również zmienić nazwę nazwę modułu w pliku gwt.xml:

<module rename-to='gwtmodulemain'> 

więc można odnieść moduł z kodu HTML w ten sposób:

<script type="text/javascript" language="javascript" src="gwtmodulemain/gwtmodulemain.nocache.js"></script> 

Powodzenia!

4

Według tego poradnika: https://developers.google.com/web-toolkit/doc/latest/tutorial/RPC

Aplet-mapping powinna składać się z modułu „przemianować-do” i „RemoteServiceRelativePath” usługa. Tak więc, jeśli mają w swojej .gwt.xml pliku * następującą linię:

<module rename-to='XXX'> 

I w Service.java pliku * masz następujący wiersz:

@RemoteServiceRelativePath("YYY") 

Następnie w Twój „web.xml” plik, należy mieć następujące linie:

<servlet-mapping> 
    <servlet-name>...servlet-name> 
    <url-pattern>/XXX/YYY</url-pattern> 
    </servlet-mapping> 
Powiązane problemy