Pergunta
Escrevendo uma página JSP, o que exatamente faz o <c:out>
Faz? Eu notei que o seguinte ambos tem o mesmo resultado:
<p>The person's name is <c:out value="${person.name}" /></p>
<p>The person's name is ${person.name}</p>
Solução
c:out
Escape os caracteres HTML para que você possa evitar scripts cruzados.
E se person.name = <script>alert("Yo")</script>
O script será executado no segundo caso, mas não quando estiver usando c:out
Outras dicas
Como dito Will Wagner, na versão antiga do JSP, você sempre deve usar c:out
Para produzir texto dinâmico.
Além disso, usando esta sintaxe:
<c:out value="${person.name}">No name</c:out>
Você pode exibir o texto "sem nome" quando o nome é nulo.
c:out
também tem um atributo para atribuir um valor padrão se o valor de person.name
por acaso é nulo.
Você pode ativar explicitamente a escape de entidades XML usando um valor de escapexml de atributo é igual ao true. Para sua informação, é por padrão "True".
As versões mais antigas do JSP não suportaram a segunda sintaxe.