2011-05-23 10 views
6

Kodowanie parametru zapytania za pomocą metody com.google.gwt.http.client.URL.encode() GWT, ale odkryłem, że nie mogę użyć metody URL.decode() na serwerze, aby ją odkodować, ponieważ implementacja jest niedostępny (podejrzewam, że używa implementacji po stronie klienta javascript). Otrzymuję ...W jaki sposób parametr kwerendy zakodowanej w GWT powinien zostać zdekodowany po stronie serwera?

java.lang.UnsatisfiedLinkError: com.google.gwt.http.client.URL.decodeImpl (Ljava/lang/String;) Ljava/lang/String;

Czy ktoś może zasugerować, co mam użyć po stronie serwera do dekodowania zakodowanego ciągu?

+0

Mam ten sam problem - klasa, którą napisałem, dekoduje parametry w ramach jego funkcjonalności, a ja zapisałem parametry w mojej bazie danych. Później, po stronie serwera, próbuję utworzyć obiekt wyodrębniony z tych parametrów - który działa idealnie po stronie klienta. Wolałbym uniknąć ponownego napisania klasy, która działa już doskonale ... Ciągle szuka odpowiedzi. – Kieveli

Odpowiedz

-1

Jeśli nie chcesz używać gwt-rpc, możesz kodować/dekodować w Base64. Sprawdź this link pod kątem implementacji gwt enkodera/dekodera Base64. Następnie wszystko, co musisz zrobić, to Base64.encode (yourParameterValue) przed wysłaniem żądania do serwera i Base64.decode (request.getParameter (yourParameterName)) w backendie zaraz po otrzymaniu żądania.

Pozdrawiam!

+0

Cześć, nie chodzi o to, że nie chcę używać gwt-rpc. Oczywiście używam tego wszędzie w mojej aplikacji. W tym przypadku napisałem jakąś funkcjonalność, która pozwala użytkownikowi zażądać pliku z serwera, który jest dostarczany jako odpowiedni typ MIME itp. Muszę przekazać parametry zapytania w żądaniu. Dzięki za końcówkę kodera Base64! Zakończyliśmy pisanie własnej wspólnej funkcji kodowania/dekodowania, ponieważ kodowanie GWT nie działa poprawnie (nie koduje symbolu procentu!) I nie ma gwarancji, że działa poprawnie z odpowiednikiem URLDecode java (punkt wyciszenia, ponieważ i tak jest zepsuty !) –

+0

Nie jestem pewien, czy dobrze jest rozwinąć własny [de] koder jako Base64, który jest zgodny z wieloma RFC (w rzeczywistości jest to zdefiniowane w RFC 4648 - http://en.wikipedia.org/wiki/Base64# RFC_4648), ale niestety nie jest zaimplementowany w GWT (nie w 2.0.3 AFAIK). Używamy Base64 [de] coder we wszystkich żądaniach, które nie są gwt-rpc i działają bez zarzutu. –

+0

Bezpieczniej jest napisać własną, aby spróbować zmiksować dwie zupełnie różne implementacje! :) –

3

java.net.URLDecoder jest zaimplementowany na AppEngine i działa doskonale z com.google.gwt.http.client.URL.encode().

+1

com.google.gwt.http.client.URL.encode() nie działa poprawnie. Wiem na pewno, że nie koduje symbolu procentowego. Nie wierzę, że działa w połączeniu z niepowiązanym java.net.URLDecoder, więc używam domowej upieczonej wspólnej funkcji kodowania/dekodowania dostępnej zarówno na kliencie, jak i na serwerze. –

+0

Zapytałeś, co możesz użyć z URL.encode(), a URLDecoder jest odpowiedzią. Myślę, że powinieneś przyjąć tę odpowiedź jako najbardziej bezpośrednią. Na marginesie URL.encode() jest implementowane za pomocą implementacji JavaScript encryptURI przeglądarki, a przynajmniej w moich testach w Chrome i Firefox znak '%' jest kodowany do '% 25'. –

+0

Niestety - Twoje rozwiązanie nie działa dla mnie. Te dwie implementacje nie są zgodne w moich testach. –

7

I rozwiązać mój problem w ten sposób: po stronie klienta, zakodować parametry używając com.google.gwt.http.client.URL.encodeQueryString(), takich jak:

URL.encodeQueryString(param) 

Po stronie serwera otrzymuję parametrów za pomocą metody ServletRequest, jak:

String myParam = req.getParameter("myparam"); 

PS I początkowo odpowiedź daje +1 Riley Lark, ale mam pewne problemy z niektórymi postaciami zbyt ... Letting ServletRequest wykonać zadanie będzie obsłużyć dla ciebie kodowanie wszystkich znaków. Zobacz Decoding international chars in AppEngine