2011-05-23 6 views
6

Estoy codificando un parámetro de consulta utilizando el método com.google.gwt.http.client.URL.encode() de GWT, pero he descubierto que no puedo usar URL.decode() en el servidor para decodificarlo porque la implementación no está disponible (sospecho que usa la implementación del lado del cliente de JavaScript). Obtengo ...¿Cómo debe decodificarse un lado del servidor un parámetro de consulta codificado GWT?

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

¿Alguien puede sugerir lo que se supone que debo usar en el lado del servidor para decodificar la cadena codificada?

+0

Tengo el mismo problema: una clase que escribí parámetros de decodificación como parte de su funcionalidad, y he almacenado los parámetros en mi base de datos. Más tarde, en el lado del servidor, intento crear un objeto extraído de estos parámetros, que funciona perfectamente en el lado del cliente. Prefiero evitar volver a escribir la clase que ya funciona perfectamente ... Todavía estoy buscando una respuesta. – Kieveli

Respuesta

-1

Si no está dispuesto a usar gwt-rpc, puede codificar/descodificar con Base64. Compruebe this link para una implementación gwt del codificador/decodificador Base64. Entonces todo lo que tiene que hacer es Base64.encode (yourParameterValue) antes de enviar la solicitud al servidor y Base64.decode (request.getParameter (yourParameterName)) en el backend justo después de recibir la solicitud.

¡salud!

+0

Hola, no es que no esté dispuesto a usar gwt-rpc. Por supuesto que estoy usando eso en todas partes en mi aplicación. En este caso, he escrito algunas funcionalidades que permiten a un usuario solicitar un archivo del servidor que se entrega como un tipo de mime apropiado, etc. Necesito pasar parámetros de consulta en la solicitud. Gracias por la punta del codificador Base64! Terminamos escribiendo nuestra propia funcionalidad de codificación/decodificación común ya que la codificación GWT no funciona correctamente (¡no codifica un símbolo de porcentaje!) Y no hay garantía de que funcione correctamente con el equivalente URLDecode de Java (punto de silencio ya que está roto de todos modos !) –

+0

No estoy seguro si es una buena idea desarrollar su propio [de] programador ya que Base64 está de acuerdo con muchos RFC (de hecho está definido en el RFC 4648 - http://en.wikipedia.org/wiki/Base64# RFC_4648) pero desafortunadamente no se implementa en GWT (no en 2.0.3 AFAIK). Hemos estado utilizando el codificador Base64 [de] en todas las solicitudes que no son gwt-rpc y funcionan perfectamente hasta el momento. –

+0

¡Es una apuesta más segura escribir la tuya que intentar mezclar dos implementaciones completamente diferentes! :) –

3

java.net.URLDecoder se implementa en AppEngine y funciona perfectamente con com.google.gwt.http.client.URL.encode().

+1

com.google.gwt.http.client.URL.encode() no funciona correctamente. Sé con certeza que no codifica un símbolo de porcentaje. No tengo fe en que funcione en conjunto con el codificador java.net.URLDecoder no relacionado, así que estoy usando algunas funciones comunes de codificación/decodificación disponibles en el hogar tanto en el cliente como en el servidor. –

+0

Ha preguntado qué podría usar con URL.encode() y URLDecoder es la respuesta. Creo que deberías aceptar esta respuesta como la más directa. Como un aparte, URL.encode() se implementa con la implementación javascript del navegador de encodeURI, y al menos en mis pruebas en Chrome y Firefox, el carácter '%' está codificado en '% 25'. –

+0

Lo siento, su solución no funcionó para mí. Las dos implementaciones no son compatibles en mis pruebas. –

7

he resuelto mi problema de esta manera: en el lado del cliente, puedo codificar los parámetros utilizando com.google.gwt.http.client.URL.encodeQueryString(), como:

URL.encodeQueryString(param) 

En el lado del servidor , me sale de los parámetros utilizando los métodos ServletRequest, como:

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

PS inicialmente respuesta hizo +1 de Riley Lark, pero luego me dieron algunos problemas con algunos caracteres demasiado ... Dejar que la ServletRequest hacer el trabajo lo hará maneja la codificación de todos los personajes para ti. Ver Decoding international chars in AppEngine

Cuestiones relacionadas