Tengo un HttpServletRequest
objeto
¿Cómo obtengo la URL completa y exacta que hizo que esta llamada llegara a mi servlet?
O al menos con la mayor precisión posible, ya que tal vez hay cosas que se pueden regenerar (el orden de los parámetros, tal vez).
Respuestas:
El
HttpServletRequest
tiene los siguientes métodos:getRequestURL()
- devuelve la parte de la URL completa antes del carácter separador de cadena de consulta?
getQueryString()
- devuelve la parte de la URL completa después del carácter separador de cadena de consulta?
Entonces, para obtener la URL completa, solo haga:
fuente
Yo uso este método:
fuente
url
se declara, crea instancias y se usa solo dentro del método, por lo que no se puede acceder desde subprocesos que no sean el que llamó al método.StringBuffer
para cada llamada y no la comparte con ningún otro subproceso. Esto debería cambiarse para ser aStringBuilder
.getRequestURI
?fuente
StringBuffer
.En un proyecto Spring puedes usar
fuente
new ServletServerHttpRequest(request).getURI()
HttpUtil está en desuso, este es el método correcto
fuente
Combinando los resultados de
getRequestURL()
ygetQueryString()
debería obtener el resultado deseado.fuente
Puedes usar filtro.
no se olvide de poner
<dispatcher>FORWARD</dispatcher>
en el mapeo de filtro en web.xmlfuente
Utilice los siguientes métodos en el objeto HttpServletRequest
java.lang.String getRequestURI (): devuelve la parte de la URL de esta solicitud desde el nombre del protocolo hasta la cadena de consulta en la primera línea de la solicitud HTTP.
java.lang.StringBuffer getRequestURL () -Reconstruye la URL que el cliente usó para realizar la solicitud.
java.lang.String getQueryString (): devuelve la cadena de consulta que está contenida en la URL de solicitud después de la ruta.
fuente
Un poco tarde para la fiesta, pero incluí esto en mi biblioteca web MarkUtils en WebUtils : aprobado por Checkstyle y probado por JUnit:
Probablemente la respuesta más rápida y robusta aquí hasta ahora detrás de la de Mat Banik, pero incluso la suya no tiene en cuenta las posibles configuraciones de puertos no estándar con HTTP / HTTPS.
Ver también:
fuente
Puede escribir un trazador de líneas simple con un ternario y si utiliza el patrón de construcción del StringBuffer desde
.getRequestURL()
:Pero eso es solo azúcar sintáctico.
fuente