2010-09-20 19 views
8

Estoy creando un sitio que envía una url a un servlet para fines de análisis. En el lado del cliente, presento el url como un parámetro codificado. Por ejemplo ...Java Servlet getParameter para un parámetro que es una URL

Submit: http://www.site.com 
Goes to: http://localhost/myservlet/?url=http%3A%2F%2Fwww.site.com 

En el lado del servidor, tengo a mi petición de servlet el parámetro así ...

String url = request.getParameter("url"); 

lo que recibo es una cadena decodificada: http://www.site.com. Hasta aquí todo bien, esto funciona como se espera ... la mayoría de las veces.

El problema se produce cuando un parámetro URL contiene parámetros de su propia ...

Submit: http://www.site.com?param1=1&param2=2 
Goes to: http://localhost/myservlet/?url=http%3A%2F%2Fwww.site.com%3Fparam1%3D1%26param2%3D2 

Todo está bien en el sitio del cliente, pero en mi servlet cuando llegue el parámetro que reciben sólo una parte de la url param!

http://www.site.com?param1=1 

Se cayó el segundo parámetro de mi entrada url param! Definitivamente estoy codificando el parámetro de URL antes de enviarlo al servidor ... ¿qué está pasando?

+0

No se puede reproducir esto en Tomcat 6.0.29. ¿Qué servletcontainer? – BalusC

+0

Usando Tomcat 6.0.29. Mi servlet está extendiendo HttpServlet. –

+0

igual que BalusC, no puedo reproducir su error en tomcat 5.5 o 6. No hubo necesidad de codificar/decodificar el texto. ¿Puede mostrarnos su código/formulario del lado del cliente? – Sean

Respuesta

9

No puedo reproducir su problema en Tomcat 6.0.29. Hay más en la materia. Tal vez un filtro en la cadena que está haciendo algo con el objeto de solicitud?

De todos modos, aquí hay un SSCCE en el sabor de una sola JSP:

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <title>Test</title> 
    </head> 
    <body> 
     <p><a href="?url=http%3A%2F%2Fwww.site.com%3Fparam1%3D1%26param2%3D2">click here</a> 
     <p>URL: ${param.url} 
    </body> 
</html> 

Copy'n'paste'n'run y haga clic en el enlace. Aquí veo el siguiente resultado:

clic aquí

URL: http://www.site.com?param1=1&param2=2

Lo mismo es reproducible, con un servlet simple como esto que se invoca directamente por la barra de direcciones del navegador:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    response.getWriter().write(request.getParameter("url")); 
} 

Tomcat está configurado por cierto con URIEncoding="UTF-8" en el conector HTTP, pero incluso con ISO-8859-1 (que es el valor predeterminado), el comportamiento es, como se espera en este caso particular, el mismo.

+0

Gracias, el problema fue que estaba enviando mi url (a través de un formulario) a otra página. La segunda página estaba empleando una llamada ajax al servidor. En el proceso, la url fue decodificada, así que tengo que volver a codificar antes de hacer mi llamada al servlet. –

Cuestiones relacionadas