Respuestas:
c:out
escapa de los caracteres HTML para que pueda evitar las secuencias de comandos entre sitios.
Si person.name = <script>alert("Yo")</script>
el script se ejecutará en el segundo caso, pero no cuando se usa c:out
Como dijo Will Wagner, en la versión anterior de jsp siempre debe usar c:out
para generar texto dinámico.
Además, usando esta sintaxis:
<c:out value="${person.name}">No name</c:out>
puede mostrar el texto "Sin nombre" cuando el nombre es nulo.
c:out
también tiene un atributo para asignar un valor predeterminado si el valor de person.name
resulta ser nulo.
Las versiones anteriores de JSP no admitían la segunda sintaxis.