43 votes

Obtenir l'URL de demande de jsp

Comment puis-je obtenir l'URL de demande de JSP.

Si j'utilise le code suivant dans JSP, j'obtiens -

 System.out.println("servlet path= " + request.getServletPath());
System.out.println("request URL= " + request.getRequestURL());
System.out.println("request URI= " + request.getRequestURI());
 

J'obtiens le chemin pour voir (jsp) avec le préfixe jsp. Mais je veux obtenir l'URL du navigateur, cet utilisateur saisit la chaîne d'adresse. Je peux obtenir une URL valide dans le contrôleur, qui retourne jsp, puis l'ajouter pour l'afficher et l'obtenir dans JSP. Mais il existe probablement un moyen plus élégant d'obtenir une URL valide dans JSP?

68voto

axtavt Points 126632

Si vous utilisez RequestDispatcher.forward() pour acheminer la demande du contrôleur vers la vue, l'URI de la demande est exposé en tant qu'attribut de demande nommé javax.servlet.forward.request_uri . Vous pouvez donc utiliser

 request.getAttribute("javax.servlet.forward.request_uri")
 

ou

 ${requestScope['javax.servlet.forward.request_uri']}
 

8voto

Koss Points 340

Essayez plutôt ceci:

 String scheme = req.getScheme();             
String serverName = req.getServerName(); 
int serverPort = req.getServerPort();    
String uri = (String) req.getAttribute("javax.servlet.forward.request_uri");
String prmstr = (String) req.getAttribute("javax.servlet.forward.query_string");
String url = scheme + "://" +serverName + ":" + serverPort + uri + "?" + prmstr;
 

Remarque: vous ne pouvez pas obtenir l'ancre HREF à partir de votre URL. Exemple, si vous avez l'url "toc.html # top", vous ne pouvez obtenir que "toc.html"

Remarque : req.getAttribute ("javax.servlet.forward.request_uri") fonctionne uniquement dans JSP. si vous l'exécutez dans le contrôleur avant JSP, le résultat est nul

Vous pouvez utiliser du code pour les deux variantes:

 public static String getCurrentUrl(HttpServletRequest req) {
    String url = getCurrentUrlWithoutParams(req);
    String prmstr = getCurrentUrlParams(req);
    url += "?" + prmstr;
    return url;
}

public static String getCurrentUrlParams(HttpServletRequest request) {
    return StringUtil.safeString(request.getQueryString());
}

public static String getCurrentUrlWithoutParams(HttpServletRequest request) {
    String uri = (String) request.getAttribute("javax.servlet.forward.request_uri");
    if (uri == null) {
        return request.getRequestURL().toString();
    }
    String scheme = request.getScheme();
    String serverName = request.getServerName();
    int serverPort = request.getServerPort();
    String url = scheme + "://" + serverName + ":" + serverPort + uri;
    return url;
}
 

7voto

lanoxx Points 1407

Pour obtenir le chemin actuel à partir du fichier JSP, vous pouvez simplement effectuer l'une des opérations suivantes:

 <%= request.getContextPath() %>
<%= request.getRequestURI() %>
<%= request.getRequestURL() %>
 

3voto

Raul Acevedo Points 21

Aucun de ces attributs sont fiables, car par la servlet spec (2.4, 2.5 et 3.0), ces attributs sont remplacées si vous en avant une deuxième fois (ou si quelqu'un appelle getNamedDispatcher). Je pense que le seul moyen fiable pour obtenir l'original de l'URI de la demande/de la chaîne de requête est de coller un filtre au début de votre filtre de la chaîne de web.xml qui définit vos propres aux attributs de la requête en fonction de la demande.getRequestURI()/getQueryString() avant toute avant/inclut lieu.

http://www.caucho.com/resin-3.0/webapp/faq.xtp contient un excellent résumé de la façon dont cela fonctionne (moins la note technique qu'une seconde avant/inclure bousille votre capacité à utiliser ces attributs).

3voto

divideByZero Points 55

Vous pouvez également utiliser

 ${pageContext.request.requestURI}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X