web-dev-qa-db-fra.com

Obtenir racine/URL de base au printemps MVC

Quel est le meilleur moyen d'obtenir l'URL racine/base d'une application Web dans Spring MVC? 

URL de base = http://www.example.com ou http://www.example.com/VirtualDirectory

22
Mike Flynn

Si l'URL de base est " http://www.example.com ", utilisez ce qui suit pour obtenir la partie "www.example.com", sans "http: //" :

Depuis un contrôleur:

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

De JSP:

Déclarez ceci sur votre document:

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

Ensuite, pour l'utiliser, référencez la variable:

<a href="http://${baseURL}">Go Home</a>
23
Nahn

Vous pouvez également créer votre propre méthode pour l'obtenir: 

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
nxhoaf

request.getRequestURL (). toString (). replace (request.getRequestURI (), request.getContextPath ())

10
Salim Hamidi

Dans le contrôleur, utilisez HttpServletRequest.getContextPath()

Dans JSP, utilisez la bibliothèque de balises de Spring: ou jstl 

8
Wins

Simplement:

String getBaseUrl(HttpServletRequest req) {
    return req.getScheme() + "://" + req.getServerName() + ":" + req.getServerPort() + req.getContextPath();
}
4
Karl.S

Soit injecter une UriCompoenentsBuilder:

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

. Ou faites-le vous-même (semblable à la réponse 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);

Vous pouvez ensuite utiliser UriComponentsBuilder à partir de cet URI:

// http://user:[email protected]/root/some/other/14
URI complete = UriComponentsBuilder.fromUri(contextUri)
                                   .path("/some/other/{id}")
                                   .buildAndExpand(14)
                                   .toUri();
4
     @RequestMapping(value="/myMapping",method = RequestMethod.POST)
      public ModelandView myAction(HttpServletRequest request){

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

URL racine du servlet

Si vous en avez besoin dans jsp, accédez au contrôleur et ajoutez-le en tant qu’objet dans ModelAndView.

Sinon, si vous en avez besoin côté client, utilisez javascript pour le récupérer: http://www.gotknowhow.com/articles/how-to-get-the-base-url-with-javascript

1
danny.lesnik

Je préfère utiliser 

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

Il renvoie une URL, un schéma, un nom de serveur et un port de serveur entièrement construits, plutôt que de concaténer et de remplacer des chaînes qui sont sujettes aux erreurs.

0
Enoobong

Dans 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>

référence https://github.com/spring-projects/greenhouse/blob/master/src/main/webapp/WEB-INF/tags/urls/absoluteUrl.tag

0
fangxing

Je pense que la réponse à cette question est: La recherche de l'URL de votre application avec uniquement un ServletContext montre pourquoi vous devez utiliser des URL relatives à la place, à moins que vous n'ayez une raison très précise de vouloir utiliser l'URL racine. 

0
jakobklamra