Я помню, как работал над проектом с группой разработчиков, и им всегда хотелось статичных
html должен быть внутри тега out (<c:out value = "words" />). Я не помню почему
это было так.
Это действительно лучшая практика при создании страниц jsp? Какие преимущества / недостатки такого подхода?




Если вы просто печатаете обычный текст, лучше сделать это в HTML. Преимущество тега c:out заключается в том, что вы можете оценивать выражения внутри тега.
<c:out value = "Hello ${user.firstName} ${user.lastName}"/>
Просто имейте в виду, что EL не экранирует специальные символы HTML. Если EL выводит данные, предоставленные пользователем, это оставляет приложение открытым для серьезных уязвимостей безопасности, таких как межсайтовый скриптинг.
Ужасная идея для статического текста. Тогда у вас не будет препятствий относительно того, что статично, а что динамически генерируется.
Кроме того, в Servlet Spec 2.3+ вы можете смешивать динамический текст со статическим текстом как:
Это статический текст, а не текст ${dynamic}.
По моему опыту, единственные причины использовать теги c:out:
Вы используете более старую спецификацию сервлетов и нуждаетесь в них для вывода ДИНАМИЧЕСКОГО текста каким-либо образом.
Вы хотите избежать вывода HTML, чтобы избежать использования <> и т. д., Заменив амперсанды их управляющими кодами и т. д.
В противном случае использование статического текста сбивает с толку программиста или сопровождающего ... куда я положил этот EL? Это было в теге c:out ... но так же было пятьдесят других строк статического текста!
Я думаю, что сегодня основной причиной использования c: out является экранирование.
Пока вы не используете старую спецификацию сервлета (что некоторые люди все еще вынуждены делать, к сожалению, к счастью, я не один из этих бедняг), я согласен с вами - экранирование XML - это прекрасно.
Это преимущество исчезает в Servlet Spec 2.3+, когда контейнер может напрямую предоставлять поддержку EL. Таким образом, c: out не следует использовать только для вывода EL в контейнере Servlet Spec 2.3+, когда Hello $ {user.firstName} $ {user.lastName} более читабельно без c: out вокруг него.