mkyong - Obtener URL de raíz/base en Spring MVC
spring mvc button onclick example (9)
¿Cuál es la mejor manera de obtener la URL raíz / base de una aplicación web en Spring MVC?
Base Url = http://www.example.com o http://www.example.com/VirtualDirectory
Creo que la respuesta a esta pregunta: encontrar la URL de su aplicación con solo un ServletContext muestra por qué debería usar las URL relativas en su lugar, a menos que tenga una razón muy específica para querer la URL raíz.
En 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>
En el controlador, use HttpServletRequest.getContextPath()
.
En JSP usa la librería de etiquetas de Spring: o jstl
Si la url base es " http://www.example.com ", use lo siguiente para obtener la parte " www.example.com ", sin la "http: //"
Desde un controlador:
@RequestMapping(value = "/someURL", method = RequestMethod.GET)
public ModelAndView doSomething(HttpServletRequest request) throws IOException{
//Try this:
request.getLocalName();
// or this
request.getLocalAddr();
}
Desde JSP:
Declara esto en la parte superior de tu documento:
<c:set var="baseURL" value="${pageContext.request.localName}"/> //or ".localAddr"
Luego, para usarlo, haga referencia a la variable:
<a href="http://${baseURL}">Go Home</a>
Simplemente :
String getBaseUrl(HttpServletRequest req) {
return req.getScheme() + "://" + req.getServerName() + ":" + req.getServerPort() + req.getContextPath();
}
También puedes crear tu propio método para obtenerlo:
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;
}
request.getRequestURL (). toString (). replace (request.getRequestURI (), request.getContextPath ())
UriCompoenentsBuilder
un UriCompoenentsBuilder
:
@RequestMapping(yaddie yadda)
public void doit(UriComponentBuilder b) {
//b is pre-populated with context URI here
}
. O hazlo tú mismo (similar a la respuesta de Salims):
// Get full URL (http://user:[email protected]/root/some?k=v#hey)
URI requestUri = new URI(req.getRequestURL().toString());
// and strip last parts (http://user:[email protected]/root)
URI contextUri = new URI(requestUri.getScheme(),
requestUri.getAuthority(),
req.getContextPath(),
null,
null);
Luego puedes usar UriComponentsBuilder desde esa URI:
// http://user:[email protected]/root/some/other/14
URI complete = UriComponentsBuilder.fromUri(contextUri)
.path("/some/other/{id}")
.buildAndExpand(14)
.toUri();
@RequestMapping(value="/myMapping",method = RequestMethod.POST)
public ModelandView myAction(HttpServletRequest request){
//then follow this answer to get your Root url
}
Si lo necesita en jsp, entre en el controlador y agréguelo como objeto en ModelAndView.
Alternativamente, si lo necesita en el lado del cliente, use javascript para recuperarlo: http://www.gotknowhow.com/articles/how-to-get-the-base-url-with-javascript