Каковы альтернативы JSTL?

Есть ли альтернативы JSTL? Одна компания, с которой я работала 3 года назад, использовала JSTL и пользовательские библиотеки тегов, чтобы отделить представление от логики. Передние разработчики использовали EL для создания сложной логики представления, создания макетов на страницах JSP, и это получилось великолепно. Возможно, появились новые технологии. Что-нибудь лучше в эти дни?

Ответы

Ответ 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. Я сделал это потому, что он был" мощным ", но он открыл всевозможные дополнительные обманные привязки, которые я никогда не планировал".

Ответ 2

Я использовал velocity с большим успехом и отлично работает как простой способ отделить бизнес-логику от логики представления. И это достаточно просто, что ваш средний веб-разработчик может это понять. Freemarker - еще одна альтернатива шаблонов, которая нравится многим людям.

Ответ 3

JSTL - это библиотека тегов, содержащая логические функции, которые можно использовать на странице JSP. Другие такие библиотеки также существуют, но, скорее всего, вы хотите посмотреть пересмотренные подходы к всему решению jsp/jstl.

В первую очередь я бы рекомендовал посмотреть:

Apache Wicket

JSF с линеями

Google Web Toolkit (GWT)

Ответ 4

JSTL рекомендует вам вводить логику в свой интерфейс. Попробуйте Apache Wicket вместо этого, где логика выполняется в java.

Ответ 5

Предполагая, что вы ищете более простой способ разработки приложения с использованием MVC, я настоятельно рекомендую посмотреть Spring Framework. Spring имеет свой собственный тег lib, который обеспечивает большую часть того, что вам нужно в JSP. Я имел большой успех, используя Spring webflow вместе с тегом lib Spring. Мне нравится разделить приложение на уровень сохранения (используя Spring поддержку ORM для Hibernate), уровень обслуживания (бизнес-логику) и уровень представления. Уровень представления включает в себя веб-потоки, JSP и POJO для проверок и действий. Я также использовал DWR на уровне представления для вызовов AJAX.

Ответ 6

Я не буду говорить, что они являются заменой или альтернативой, но я думаю, что Java-Server-Faces продвигается дальше в разделении представление из логики...