32 votes

Comment encoder une chaîne avec URL avec JSTL?

Quelle est la meilleure façon de coder l'URL d'une chaîne avec JSTL?

 <c:url value="/user/${user.name}"/>
 

Selon toute documentation que je trouve , cela devrait s'en occuper. Mais ce n'est pas le cas. Il code magnifiquement les paramètres ( <c:url value="/user/${user.name}"><c:param name="section" value="employment 4u so good"/></c:url> ) mais je ne passe aucun paramètre. Comment puis-je encoder en toute sécurité une simple URL, comme ci-dessus, sans avoir peur de ce que ${user.name} pourrait être?

54voto

BalusC Points 498232

L' <c:url> ne pas encoder l'URL comme indiqué dans sa valeur, mais il suffit de demander les paramètres qui sont spécifiés par un imbriquée <c:param>. IBM article qui est lié aussi ne dit pas le contraire. Je pense que vous avez confondu avec "réécriture d'URL" (qui n'est rien de plus que d'ajouter les jsessionid chaque fois que nécessaire).

Pour atteindre votre condition, le mieux est de créer un personnalisé EL fonction qui délégués URLEncoder#encode().

<a href="http://stackoverflow.com/user/${util:urlEncode(user.name)}">view profile</a>

avec

public static String urlEncode(String value) throws UnsupportedEncodingException {
    return URLEncoder.encode(value, "UTF-8");
}

Dans la 2ème partie de cette réponse , vous pouvez trouver une base de lancement pour exemple comment déclarer et enregistrer personnalisé EL fonctions.

5voto

J. Dimeo Points 143

Je suis sûr que vous saviez déjà que c'était une solution alternative, mais j'ai décidé que pour mon usage particulier, la solution la plus élégante était d'utiliser un attribut de demande.

Donc dans ma servlet:

 req.setAttribute("myUrl", URLEncoder.encode(myUrl, "UTF-8"));
 

et dans mon JSP:

 "...${myUrl}"
 

1voto

shivaganesh Points 21

vous pouvez utiliser le jakarta Chaîne TagLib, qui a un encodeUrl tag: http://jakarta.apache.org/taglibs/doc/string-doc/string-1.1.0/index.html#encodeUrl

Suivez ces étapes pour configurer votre application web avec cette bibliothèque de balises:

  1. Exemplaire de la bibliothèque de balises descripteur de fichier à l' /WEB-INF sous-répertoire de votre application web.
  2. Exemplaire de la bibliothèque de balises fichier JAR à l' /WEB-INF/lib sous-répertoire de votre application web.
  3. Ajouter un élément à votre application web descripteur de déploiement dans /WEB-INF/web.xml comme dit dans le lien ci-dessus

Pour utiliser les balises de cette bibliothèque dans vos pages JSP, ajouter la directive suivante dans le haut de chaque page:

ci-dessous l'exemple d'utilisation en jsp:

<a href="str:decodeUrl>${URL}</str:decodeUrl)"/>

1voto

Daniel De León Points 2842

Restez simple de cette façon:

 <%= java.net.URLEncoder.encode(request.getAttribute("user.name").toString() , "UTF-8") %>
 

0voto

Alexandre Roger Points 30

Le billet de blog suivant est extrêmement informatif: http://blog.lunatech.com/2009/02/03/what-every-web-developer-must-know-about-url-encoding . Bien qu'il ne couvre pas la partie JSTL de l'équation, il explique à la fois les problèmes intrinsèques aux URL d'échappement et les pièges Java spécifiques.

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