Я имею HttpServletRequest
объект.
Как я получаю полный и точный URL, который заставил этот вызов прибывать в мой сервлет?
Или по крайней мере максимально точно, как существуют, возможно, вещи, которые могут быть повторно созданы (порядок параметров, возможно).
HttpServletRequest
имеет следующие методы:
getRequestURL ()
- возвращает часть полного URL-адреса перед запросом символ разделителя строк ?
getQueryString ()
- возвращает часть полного URL-адреса после символа разделителя строки запроса ?
Итак, чтобы получить полный URL-адрес, просто выполните:
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();
}
}
HttpUtil устарел, это правильный метод
StringBuffer url = req.getRequestURL();
String queryString = req.getQueryString();
if (queryString != null) {
url.append('?');
url.append(queryString);
}
String requestURL = url.toString();
Объединение результатов getRequestURL ()
и getQueryString ()
должно дать желаемый результат.
// 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;
}