Получить корневой / базовый URL в Spring MVC - PullRequest
23 голосов
/ 16 февраля 2011

Каков наилучший способ получения корневого / базового URL-адреса веб-приложения в Spring MVC?

Базовый URL = http://www.example.com или http://www.example.com/VirtualDirectory

Ответы [ 10 ]

25 голосов
/ 30 марта 2013

Если базовый URL-адрес "http://www.example.com",", используйте следующую команду для получения части " www.example.com " без "http://":

ИзКонтроллер:

@RequestMapping(value = "/someURL", method = RequestMethod.GET)
public ModelAndView doSomething(HttpServletRequest request) throws IOException{
    //Try this:
    request.getLocalName(); 
    // or this
    request.getLocalAddr();
}

Из JSP:

Объявите это в верхней части документа:

<c:set var="baseURL" value="${pageContext.request.localName}"/> //or ".localAddr"

Затем используйтеэто, ссылка на переменную:

<a href="http://${baseURL}">Go Home</a>
14 голосов
/ 14 марта 2016

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

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;

}
11 голосов
/ 04 марта 2015

request.getRequestURL (). ToString (). Replace (request.getRequestURI (), request.getContextPath ())

8 голосов
/ 26 октября 2012

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

В JSP используйте библиотеку тегов Spring: или jstl

5 голосов
/ 22 декабря 2018

Я предпочитаю использовать

final String baseUrl = ServletUriComponentsBuilder.fromCurrentContextPath().build().toUriString();

Возвращает полностью созданный URL, схему, имя сервера и порт сервера, а не объединяет и заменяет строки, которые подвержены ошибкам.

5 голосов
/ 07 декабря 2015

Либо ввести 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();
4 голосов
/ 27 июля 2017

Просто:

String getBaseUrl(HttpServletRequest req) {
    return req.getScheme() + "://" + req.getServerName() + ":" + req.getServerPort() + req.getContextPath();
}
1 голос
/ 16 февраля 2011
     @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

0 голосов
/ 11 декабря 2016

В 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

0 голосов
/ 21 сентября 2011

Я думаю, что ответ на этот вопрос: Поиск URL вашего приложения только с помощью ServletContext показывает, почему вы должны использовать относительные URL-адреса, если у вас нет особых причин для получения корневого URL-адреса.

...