2008-10-20 8 views
4

Je me souviens d'avoir travaillé sur un projet avec un groupe de développeurs et ils voulaient toujours que le texte html statique soit dans une étiquette de sortie (<c:out value="words" />). Je ne me souviens pas pourquoi c'était le cas.Est-ce vraiment une bonne pratique d'utiliser jstl out tag?

Est-ce vraiment une bonne pratique lors de la construction de pages jsp? Quels sont les avantages/désavantages d'une telle approche?

Répondre

10

C'est une idée terrible pour le texte statique. Vous n'avez alors aucune barrière sur ce qui est statique et ce qui est généré dynamiquement.

D'ailleurs, sur Servlet Spec 2.3+ vous pouvez avoir du texte dynamique mélangé avec du texte statique:

Ceci est statique, pas ${dynamic} texte.

Les seules raisons d'utiliser c:out balises, dans mon expérience:

  1. Vous utilisez une spécification de servlet plus, et eux ont besoin pour produire du texte dynamique d'une certaine façon

  2. Vous voulez échapper à HTML sortie pour éviter d'utiliser <>, etc, en remplaçant esperluette avec leurs codes de contrôle, etc.

O par conséquent, les faire utiliser du texte statique confond le programmeur ou le mainteneur ... maintenant où ai-je mis cela EL? C'était dans une balise c:out ... mais aussi cinquante autres lignes de texte statique!

+0

Je pense qu'échapper est la raison principale aujourd'hui pour utiliser c: out. –

+0

Tant que vous n'utilisez pas une spécification de servlet plus ancienne (que certaines personnes sont encore obligées de faire, malheureusement, je ne suis pas une de ces pauvres âmes), je suis d'accord avec vous - le XML d'échappement est adorable. – MetroidFan2002

3

Si vous imprimez simplement du texte brut, il est préférable de le faire en HTML. L'avantage de la balise c:out est que vous pouvez évaluer les expressions à l'intérieur de la balise.

<c:out value="Hello ${user.firstName} ${user.lastName}"/> 
+0

Cet avantage disparaît dans la spéclet de servlet 2.3+, lorsque le conteneur est capable de fournir un support EL directement. En tant que tel, c: out ne doit pas être utilisé uniquement pour sortir EL dans un conteneur Servlet Spec 2.3+, lorsque Hello $ {user.firstName} $ {user.lastName} est plus lisible sans le c: out autour de lui. – MetroidFan2002

+1

Sachez simplement que EL n'échappe pas aux caractères HTML spéciaux. Si EL génère des données fournies par un utilisateur, il laisse l'application ouverte à des vulnérabilités de sécurité désagréables telles que les scripts inter-sites. – laz

Questions connexes