2008-12-04 4 views
15

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

ответ

16

JSTL и EL - две различные концепции.

JSTL - это только одна библиотека тегов. Большинство фреймворков предоставляют свой собственный taglib, который приблизительно дублирует функциональность JSTL. Я говорю примерно так, потому что они часто злоупотребляют или игнорируют ключевые принципы JSP и API Servlet.

Сила JSTL заключается в том, что она была разработана авторами JSP с надежным пониманием JSP и сервлетов. Сторонние taglib часто создаются кем-то, кто не хотел RTFM и решил «начать с нуля» и придумать «что-то более простое». Однако JSTL не собирался делать все. Его можно использовать очень успешно в сочетании с другими taglib, включая ваши собственные теги.

Язык выражения является основополагающим для JSP. Он интерпретируется контейнером и может использоваться во многих контекстах. Он также в значительной степени свободен от побочных эффектов и имеет простой, легко понятный синтаксис, который не позволяет много логики загружаться в уровень презентации. Являясь частью спецификации Java EE, она также пользуется широкой поддержкой инструментов. Например, многие IDE могут реорганизовать зависимое выражение EL при переименовании свойства.

Struts2 представил OGNL более широкой аудитории. OGNL - это возврат к злым временам сценариев. Он более мощный, и поэтому разработчики с радостью злоупотребляют им, чтобы вызывать произвольные методы на уровне презентации и другие зверства.Атакующие счастливо эксплуатируют его; это общий источник vulnerabilities in Struts2-based applications.

Я был знаком с OGNL из-за многолетнего опыта работы с WebWork, и мое самое большое разочарование в Struts2 состояло в том, что я не смог сбросить этот треск. Даже основатель WebWork, Patrick Lightbody, acknowledges that adoption was a mistake.* К счастью, его можно использовать только в ограниченном контексте, например, в тегах OGNL (и некоторых других удивительных местах), в отличие от EL, который поддерживается самим контейнером и может использоваться в любом месте страницы ,

Если вы хотите уйти от JSP, но не используете компонентный подход, такой как JSF, вы можете проверить проект Terrence Parr StringTemplate. В центре внимания будет побочный эффект –, который дает ценные улучшения в области безопасности и масштабируемости.

* QFT: После успешной атаки на сайт разработчиков Apple, основанный на Struts2, Патрик Лайтбойт сказал: «К сожалению, я чувствую определенную ответственность за эту довольно серьезную дыру в безопасности. Там было несколько подобных, и все они укоренены в том, что почти 9 лет назад я принял (плохое) решение использовать OGNL как язык выражения WebWork. Я сделал это потому, что он был «мощным», но он открыл всевозможные дополнительные обманные обманки, которые я никогда не планировал ».

6

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

3

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

В частности, я бы рекомендовал смотреть на:

Apache калиткой

JSF с Facelets

Google Web Toolkit (GWT)

0

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

1

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

3

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

+0

Согласовано, разделение проблем не становится чище, чем Wicket. – 2008-12-05 04:53:06

Смежные вопросы