Подтвердить что ты не робот

Какой лучший способ получить текущий URL-адрес в Spring MVC?

Я хотел бы создать URL-адреса на основе URL-адреса, используемого клиентом для активного запроса. Есть ли что-нибудь умнее, чем взять текущий объект HttpServletRequest, а методы getParameter...() - перестроить полный URL, включая (и только) его параметры GET.

Уточнение: если возможно, я хочу отказаться от использования объекта HttpServletRequest.

4b9b3361

Ответ 1

Ну, есть два способа облегчения доступа к этим данным, но интерфейс не дает возможности получить весь URL с одним вызовом. Вы должны создать его вручную:

public static String makeUrl(HttpServletRequest request)
{
    return request.getRequestURL().toString() + "?" + request.getQueryString();
}

Я не знаю, как это сделать с любыми средствами Spring MVC.

Если вы хотите получить доступ к текущему запросу, не передавая его повсюду, вам нужно будет добавить слушателя в web.xml:

<listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

И затем используйте это, чтобы получить запрос, привязанный к текущему потоку:

((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest()

Ответ 2

Вместо прямого использования RequestContextHolder вы также можете использовать ServletUriComponentsBuilder и его статические методы:

  • ServletUriComponentsBuilder.fromCurrentContextPath()
  • ServletUriComponentsBuilder.fromCurrentServletMapping()
  • ServletUriComponentsBuilder.fromCurrentRequestUri()
  • ServletUriComponentsBuilder.fromCurrentRequest()

Они используют RequestContextHolder под капотом, но предоставляют дополнительную гибкость для создания новых URL-адресов, используя возможности UriComponentsBuilder.

Пример:

ServletUriComponentsBuilder builder = ServletUriComponentsBuilder.fromCurrentRequestUri();
builder.scheme("https");
builder.replaceQueryParam("someBoolean", false);
URI newUri = builder.build().toUri();

Ответ 3

Java URI Class может помочь вам в этом:

public static String getCurrentUrl(HttpServletRequest request){
    URL url = new URL(request.getRequestURL().toString());
    String host  = url.getHost();
    String userInfo = url.getUserInfo();
    String scheme = url.getProtocol();
    String port = url.getPort();
    String path = request.getAttribute("javax.servlet.forward.request_uri");
    String query = request.getAttribute("javax.servlet.forward.query_string");

    URI uri = new URI(scheme,userInfo,host,port,path,query,null)
    return uri.toString();
}

Ответ 4

в файле jsp:

request.getAttribute("javax.servlet.forward.request_uri")