2008-10-30 14 views
8

Estoy buscando analizar una URL para obtener una colección de los parámetros de la cadena de consulta en Java. Para que quede claro, necesito analizar una URL determinada (o el valor de cadena de un objeto de URL), no la URL de una solicitud de servlet.alternativa a la versión obsoleta javax.servlet.http.HttpUtils.parseQueryString?

Parece que el método javax.servlet.http.HttpUtils.parseQueryString sería la elección obvia, pero ha quedado en desuso.

¿Existe un método alternativo que me falta, o simplemente se ha desaprobado sin una función equivalente de reemplazo/mejorada?

+1

La falta de soluciones para este tipo de tareas sencillas es lo que repele a los demás desde Java. (Y esto viene de un chico de Java). –

Respuesta

2

Bueno, como mencionas que la URL no proviene de una solicitud de servlet, la respuesta correcta es, como de costumbre, depende.

El problema con la parte de consulta de una url es que no existe una especificación clara sobre cómo manejar la duplicación de parámetros.

Por ejemplo, considere una URL como la siguiente:

http://www.example.com?param1=value1&param2=value2&param1=value3 

¿Qué esperas como un valor para param1? el primer valor, el último, una matriz? El problema es que, de acuerdo con las especificaciones, todas estas respuestas son válidas y el proveedor del servidor es libre de admitir una u otra. Algunos usan la notación param1 [] para indicar que debe tratarse como una matriz, pero nuevamente, esta no es una solución unificada.

Por lo tanto, la "mejor" solución es saber cómo su destino maneja los parámetros, e imitar el comportamiento con una clase de utilidad hecha a sí misma.

+0

No creo que haya tal dilema, la respuesta obvia es la matriz. –

+0

Bueno, según las especificaciones, no lo es. Trabajé en un proyecto con Struts y Spring, donde solo la última declaración sobrepasaba a las anteriores. – gizmo

5

Creo que la idea es usar HttpServletRequest en su lugar. Están los métodos getParameterMap(), getParameterNames() y getParameterValues ​​() para comenzar.

También existe el método getParameter (String paramname) para obtener el valor de un método específico.

Estos no hacen distinción entre los parámetros de la cadena de consulta y los parámetros del formulario, así que si tu intención era buscar una cadena de consulta en particular, entonces supongo que esto no ayudaría.

+0

Probablemente debería haber sido más específico en la pregunta. Estoy intentando analizar una URL que no es la URL de solicitud de servlet, pero que se obtiene como un valor de parámetro (URL codificada) o un valor de cadena de un registro de base de datos. –

0

Por lo que yo sé, no hay ninguno.

Sin embargo, no debería ser demasiado difícil escribir uno. La parte más difícil, me imagino, sería decodificar el nombre/valores de la URL (que realmente no es tan difícil, si lo piensas), y puedes usar java.net.URLDecoder#decodeURL(String,String) para eso.