HttpServletSolicitud para completar la URL

Resuelto flybywire asked hace 14 años • 12 respuestas

Tengo un HttpServletRequestobjeto.

¿Cómo obtengo la URL completa y exacta que provocó que esta llamada llegara a mi servlet?

O al menos con la mayor precisión posible, ya que quizás haya cosas que se puedan regenerar (quizás el orden de los parámetros).

flybywire avatar Feb 08 '10 21:02 flybywire
Aceptado

Tiene HttpServletRequestlos 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 la cadena de consulta?

Entonces, para obtener la URL completa, simplemente haga:

public static String getFullURL(HttpServletRequest request) {
    StringBuilder requestURL = new StringBuilder(request.getRequestURL().toString());
    String queryString = request.getQueryString();

    if (queryString == null) {
        return requestURL.toString();
    } else {
        return requestURL.append('?').append(queryString).toString();
    }
}
Bozho avatar Feb 08 '2010 14:02 Bozho

Yo uso este método:

public static String getURL(HttpServletRequest req) {

    String scheme = req.getScheme();             // http
    String serverName = req.getServerName();     // hostname.com
    int serverPort = req.getServerPort();        // 80
    String contextPath = req.getContextPath();   // /mywebapp
    String servletPath = req.getServletPath();   // /servlet/MyServlet
    String pathInfo = req.getPathInfo();         // /a/b;c=123
    String queryString = req.getQueryString();          // d=789

    // Reconstruct original requesting URL
    StringBuilder url = new StringBuilder();
    url.append(scheme).append("://").append(serverName);

    if (serverPort != 80 && serverPort != 443) {
        url.append(":").append(serverPort);
    }

    url.append(contextPath).append(servletPath);

    if (pathInfo != null) {
        url.append(pathInfo);
    }
    if (queryString != null) {
        url.append("?").append(queryString);
    }
    return url.toString();
}
MatBanik avatar Mar 06 '2011 18:03 MatBanik

En un proyecto Spring puedes usar

UriComponentsBuilder.fromHttpRequest(new ServletServerHttpRequest(request)).build().toUriString()
Peter Szanto avatar May 19 '2016 08:05 Peter Szanto
// http://hostname.com/mywebapp/servlet/MyServlet/a/b;c=123?d=789

public static String getUrl(HttpServletRequest req) {
    String reqUrl = req.getRequestURL().toString();
    String queryString = req.getQueryString();   // d=789
    if (queryString != null) {
        reqUrl += "?"+queryString;
    }
    return reqUrl;
}
Teja Kantamneni avatar Feb 08 '2010 14:02 Teja Kantamneni

HttpUtil está en desuso, este es el método correcto

StringBuffer url = req.getRequestURL();
String queryString = req.getQueryString();
if (queryString != null) {
    url.append('?');
    url.append(queryString);
}
String requestURL = url.toString();
Vinko Vrsalovic avatar Feb 08 '2010 14:02 Vinko Vrsalovic