Usenet довольно хороша также comp.lang.perl.misc, comp.lang.perl.modules, и comp.lang.perl.moderated являются хорошими местами для задавания вопросов, по моему скромному мнению.
Вы также можете создать свой собственный метод, чтобы получить его:
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;
}
В контроллере используйте HttpServletRequest.getContextPath()
.
В JSP с использованием библиотеки тегов Spring: или jstl
@RequestMapping(value="/myMapping",method = RequestMethod.POST)
public ModelandView myAction(HttpServletRequest request){
//then follow this answer to get your Root url
}
Если вам это нужно в jsp, войдите в контроллер и добавьте его в качестве объекта в ModelAndView.
В качестве альтернативы, если вам это нужно на стороне клиента, используйте javascript для его извлечения: http://www.gotknowhow.com/articles/how-to-get-the-base-url-with-javascript
Либо введите 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();
В 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>
я знаю, что этот вопрос довольно стар, но это - единственное, которое я нашел об этой теме, таким образом, я хотел бы совместно использовать свой подход для будущих посетителей.
, Если Вы хотите получить базовый URL от WebRequest, можно сделать следующее:
ServletUriComponentsBuilder.fromRequestUri(HttpServletRequest request);
Это даст Вам схему ("http" или "https"), хост ("example.com"), порт ("8080") и путь ("/some/path"), в то время как fromRequest(request)
дал бы Вам параметры запроса также. Но поскольку мы хотим получить базовый URL только (схема, хост, порт), нам не нужны параметрические усилители запроса.
Теперь можно просто удалить путь со следующей строкой:
ServletUriComponentsBuilder.fromRequestUri(HttpServletRequest request).replacePath(null);
<час> Наконец наша острота для получения базового 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)
, поскольку это уже - только схема, хост и порт.