2011-05-23 7 views
6

Sto codificando un parametro di query utilizzando il metodo com.google.gwt.http.client.URL.encode() di GWT, ma ho scoperto che non posso utilizzare URL.decode() sul server per decodificarlo perché l'implementazione non è disponibile (ho il sospetto che usi l'implementazione lato client javascript). Ottengo ...Come deve essere decodificato un parametro di query codificato GWT dal lato server?

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

Qualcuno può suggerire cosa dovrei usare il lato server per decodificare la stringa codificata?

+0

Ho lo stesso problema - una classe che ho scritto decodifica i parametri come parte della sua funzionalità, e ho memorizzato i parametri nel mio database. Più tardi, dal lato server, sto cercando di creare un oggetto estratto da questi parametri, che funziona perfettamente sul lato client. Preferirei evitare di riscrivere la classe che funziona già perfettamente ... Sto ancora cercando una risposta. – Kieveli

risposta

-1

Se non si desidera utilizzare gwt-rpc è possibile codificare/decodificare con Base64. Controllare this link per un'implementazione gwt dell'encoder/decoder Base64. Quindi tutto ciò che devi fare è Base64.encode (yourParameterValue) prima di inviare la richiesta al server e Base64.decode (request.getParameter (yourParameterName)) sul back-end subito dopo aver ricevuto la richiesta.

evviva!

+0

Ciao, non è che non sono disposto a usare gwt-rpc. Ovviamente lo sto usando ovunque nella mia app. In questo caso ho scritto alcune funzionalità che consentono a un utente di richiedere un file dal server che viene consegnato come un tipo mime appropriato, ecc ... Devo passare i parametri di query nella richiesta. Grazie per la punta dell'encoder Base64! Abbiamo finito per scrivere la nostra funzionalità di codifica/decodifica comune poiché la codifica GWT non funziona correttamente (non codifica un simbolo di percentuale!) E non c'è alcuna garanzia che funzioni correttamente con l'equivalente URLJecode java (punto di silenzio poiché è comunque rotto !) –

+0

Non sono sicuro se sia una buona idea sviluppare il proprio codificatore [de] come Base64 è in accordo con molti RFC (in realtà è definito su RFC 4648 - http://en.wikipedia.org/wiki/Base64# RFC_4648) ma sfortunatamente non è implementato in GWT (non in 2.0.3 AFAIK). Abbiamo usato il codificatore Base64 [de] in tutte le richieste che non sono gwt-rpc e stanno funzionando perfettamente finora. –

+0

È una scommessa più sicura scrivere il proprio che per tentare di combinare due implementazioni completamente diverse! :) –

3

java.net.URLDecoder è implementato su AppEngine e funziona perfettamente con com.google.gwt.http.client.URL.encode().

+1

com.google.gwt.http.client.URL.encode() non funziona correttamente. So per certo che non codifica un simbolo di percentuale. Non ho fiducia che funzioni in congiunzione con il java.net.URLDecoder non collegato, quindi sto utilizzando alcune funzionalità di codifica/decodifica comuni home-baked disponibili sia sul client che sul server. –

+0

Hai chiesto cosa potresti usare con URL.encode() e URLDecoder è la risposta. Penso che dovresti accettare questa risposta come la più diretta. Per inciso, URL.encode() è implementato con l'implementazione javascript del browser di encodeURI, e almeno nei miei test in Chrome e Firefox il carattere '%' è codificato in '% 25'. –

+0

Mi dispiace, la tua soluzione non ha funzionato per me. Le due implementazioni non sono compatibili nei miei test. –

7

ho risolto il problema in questo modo: sul lato client, ho codificare i parametri utilizzando com.google.gwt.http.client.URL.encodeQueryString(), come:

URL.encodeQueryString(param) 

Sul lato server , ottengo i parametri utilizzando i metodi ServletRequest, come:

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

PS inizialmente ho la risposta di fatto +1 Riley Lark, ma poi ho avuto alcuni problemi con alcuni caratteri troppo ... Lasciando il ServletRequest fare il lavoro sarà gestisci la codifica di tutti i caratteri per te. Vedere Decoding international chars in AppEngine