292 votes

HttpServletRequest pour compléter l'URL

J'ai un objet HttpServletRequest.

Comment puis-je obtenir l'URL complète et exacte à l'origine de cet appel sur mon servlet?

Ou au moins aussi précisément que possible, car il y a peut-être des choses qui peuvent être régénérées (l'ordre des paramètres, peut-être).

462voto

Bozho Points 273663

L' HttpServletRequest a les méthodes suivantes:

  • getRequestURL() - retourne la partie de l'URL complète avant de la chaîne de requête caractère séparateur ?
  • getQueryString() - retourne la partie de l'URL complète après la chaîne de requête caractère séparateur ?

Donc, pour obtenir la totalité de l'URL, il suffit de faire:

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

    if (queryString == null) {
        return requestURL.toString();
    } else {
        return requestURL.append('?').append(queryString).toString();
    }
}

168voto

Mat Banik Points 5789

J'utilise cette méthode:

 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
    StringBuffer url =  new StringBuffer();
    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();
}
 

28voto

Teja Kantamneni Points 9112
// 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;
}

7voto

Vinko Vrsalovic Points 116138

HttpUtil d'être déprécié, c'est la méthode correcte

 StringBuffer url = req.getRequestURL();
String queryString = req.getQueryString();
if (queryString != null) {
    url.append('?');
    url.append(queryString);
}
String requestURL = url.toString();
 

5voto

Michael Borgwardt Points 181658

En combinant les résultats de getRequestURL() et getQueryString() devriez obtenir le résultat souhaité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X