JSTL и EL - это две разные концепции.
JSTL - это всего лишь одна библиотека тегов. Большинство фреймворков предоставляют свой собственный taglib, который примерно дублирует функциональность JSTL. Я говорю примерно, потому что они часто неправильно используют или игнорируют ключевые принципы JSP и Servlet API.
Сила JSTL заключается в том, что он был разработан авторами JSP с глубоким пониманием JSP и сервлетов. Сторонние теги часто создаются каким-то парнем, который не хотел RTFM и решил «начать с нуля» и придумать «что-то попроще». Однако JSTL не собирался делать все. Его можно очень успешно использовать в сочетании с другими тегами, включая ваши собственные пользовательские теги.
Язык выражений является фундаментальным для JSP. Он интерпретируется контейнером и может использоваться во многих контекстах. Он также в значительной степени свободен от побочных эффектов и имеет простой, легко понятный синтаксис, который не позволяет большому количеству логики попадать на уровень представления. Будучи частью спецификации Java EE, он также пользуется широкой поддержкой инструментов. Например, многие IDE могут реорганизовать зависимое выражение EL при переименовании свойства.
Struts2 представил OGNL для более широкой аудитории. OGNL - это возврат к злым дням сценариев. Он более мощный, и поэтому разработчики с радостью используют его для вызова произвольных методов на уровне представления и других злодеяний. Злоумышленники тоже с удовольствием этим пользуются; это общий источник уязвимостей в приложениях на основе Struts2.
Я был знаком с OGNL по многолетнему опыту работы с WebWork, и мое самое большое разочарование в Struts2 заключалось в том, что я не смог избавиться от этого мусора. Даже основатель WebWork, Патрик Лайтбоди, признает, что усыновление было ошибкой. * К счастью, его можно использовать только в ограниченных контекстах, таких как теги с поддержкой OGNL (и в некоторых других удивительных местах), в отличие от EL, который поддерживается самим контейнером и может использоваться в любом месте страницы.
Если вы хотите уйти от JSP, но у вас нет такого подхода на основе компонентов, как JSF, вы можете проверить проект Теренса Парра StringTemplate . Основное внимание здесь уделяется избавлению от побочных эффектов, что значительно повышает безопасность и масштабируемость.
* QFT: После успешной атаки на сайт разработчика Apple на базе Struts2 Патрик Лайтбоди сказал: «К сожалению, я чувствую некоторую ответственность за эту довольно серьезную дыру в безопасности. Было несколько таких, и все они внедрены в тот факт, что почти 9 лет назад я принял (плохое) решение использовать OGNL в качестве языка выражений WebWork. Я сделал это потому, что он был «мощным», но открывал все виды дополнительных хитростей связывания, которые я никогда не намеревался. "