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