Получение корневого / базового URL-адреса в Spring MVC

Usenet довольно хороша также comp.lang.perl.misc, comp.lang.perl.modules, и comp.lang.perl.moderated являются хорошими местами для задавания вопросов, по моему скромному мнению.

26
задан Martijn Pieters 12 May 2014 в 15:19
поделиться

6 ответов

Вы также можете создать свой собственный метод, чтобы получить его:

public String getURLBase(HttpServletRequest request) throws MalformedURLException {

    URL requestURL = new URL(request.getRequestURL().toString());
    String port = requestURL.getPort() == -1 ? "" : ":" + requestURL.getPort();
    return requestURL.getProtocol() + "://" + requestURL.getHost() + port;

}
17
ответ дан 28 November 2019 в 06:12
поделиться

В контроллере используйте HttpServletRequest.getContextPath().

В JSP с использованием библиотеки тегов Spring: или jstl

9
ответ дан 28 November 2019 в 06:12
поделиться
     @RequestMapping(value="/myMapping",method = RequestMethod.POST)
      public ModelandView myAction(HttpServletRequest request){

       //then follow this answer to get your Root url
     }

Корневой URl сервлета

Если вам это нужно в jsp, войдите в контроллер и добавьте его в качестве объекта в ModelAndView.

В качестве альтернативы, если вам это нужно на стороне клиента, используйте javascript для его извлечения: http://www.gotknowhow.com/articles/how-to-get-the-base-url-with-javascript

1
ответ дан 28 November 2019 в 06:12
поделиться

Либо введите UriCompoenentsBuilder:

@RequestMapping(yaddie yadda)
public void doit(UriComponentBuilder b) {
  //b is pre-populated with context URI here
}

. Или сделайте это самостоятельно (аналогично ответу Salims):

// Get full URL (http://user:pwd@www.example.com/root/some?k=v#hey)
URI requestUri = new URI(req.getRequestURL().toString());
// and strip last parts (http://user:pwd@www.example.com/root)
URI contextUri = new URI(requestUri.getScheme(), 
                         requestUri.getAuthority(), 
                         req.getContextPath(), 
                         null, 
                         null);

Затем вы можете использовать UriComponentsBuilder из этого URI:

// http://user:pwd@www.example.com/root/some/other/14
URI complete = UriComponentsBuilder.fromUri(contextUri)
                                   .path("/some/other/{id}")
                                   .buildAndExpand(14)
                                   .toUri();
6
ответ дан 28 November 2019 в 06:12
поделиться

В JSP

<c:set var="scheme" value="${pageContext.request.scheme}"/>
<c:set var="serverPort" value="${pageContext.request.serverPort}"/>
<c:set var="port" value=":${serverPort}"/>

<a href="${scheme}://${pageContext.request.serverName}${port}">base url</a>

ссылка https://github.com/spring-projects/greenhouse/blob/master/src/main/webapp/WEB-INF/tags/urls/ absoluteUrl.tag

1
ответ дан 28 November 2019 в 06:12
поделиться

Объяснение

я знаю, что этот вопрос довольно стар, но это - единственное, которое я нашел об этой теме, таким образом, я хотел бы совместно использовать свой подход для будущих посетителей.

, Если Вы хотите получить базовый URL от WebRequest, можно сделать следующее:

ServletUriComponentsBuilder.fromRequestUri(HttpServletRequest request);

Это даст Вам схему ("http" или "https"), хост ("example.com"), порт ("8080") и путь ("/some/path"), в то время как fromRequest(request) дал бы Вам параметры запроса также. Но поскольку мы хотим получить базовый URL только (схема, хост, порт), нам не нужны параметрические усилители запроса.

Теперь можно просто удалить путь со следующей строкой:

ServletUriComponentsBuilder.fromRequestUri(HttpServletRequest request).replacePath(null);
<час>

TLDR

Наконец наша острота для получения базового URL была бы похожа на это:

//request URL: "http://example.com:8080/some/path?someParam=42"

String baseUrl = ServletUriComponentsBuilder.fromRequestUri(HttpServletRequest request)
        .replacePath(null)
        .build()
        .toUriString();

//baseUrl: "http://example.com:8080"
<час>

Дополнение

, Если Вы хотите использовать эту внешнюю сторону контроллер или где-нибудь, где Вы не имеете эти HttpServletRequest существующий, можно просто заменить

ServletUriComponentsBuilder.fromRequestUri(HttpServletRequest request).replacePath(null)

с [1 119]

ServletUriComponentsBuilder.fromCurrentContextPath()

, Это получит HttpServletRequest в течение пружины RequestContextHolder. Вам также не будет нужно replacePath(null), поскольку это уже - только схема, хост и порт.

0
ответ дан 28 November 2019 в 06:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: