мир без jsp. thymeleaf 2.0
TRANSCRIPT
Мир без JSP.
Thymeleaf 2.0
Что плохого в JSP?
• 2002 год (ajax ещё не назывался ajax`ом)
• Скриплеты
• Невалидный фрагментированный (X)HTML
• «Многобукаф»
• ENVIRONMENT!
• Static HTML -> JSP -> HTML
Идеальный серверный шаблон
• Минимум усилий
• Удовольствие от разработки
• Совместимость с mainstream технологиями
• Скорость разработки
• Скорость генерации страницы
• Фишечки-плюшки
Встречаем Thymeleaf!
Pros
• Низкий порог входа
• Здоровый Open Source + Коммьюнити
• Подходит для насыщенных HTML-писем
• Обрабатывает неполные документы
• Мощный Expression Language
Pros
• ИнтеграцияSpring,Tiles2, SiteMesh, Jawr, Play 1.2 …
• SAX parser + Tailored DOM + Caching
• Расширяемость (кастомные теги/аттрибуты/EL)
• Готов к продакшнPolish Ministry of JusticeBroadleafcommerceSahibinden
Cons
• Непривычный синтаксис
• Медленнее, чем FreeMarker и Velocity
• Нет taglibs (но есть «диалекты»)
• Нет автодополнения в IDE
• Не лучшее решение для сложных страниц (1000+ тегов/итераций)
- 25 параллельных потоков - 50000 запросов на страницу- Oracle JVM 1.7.0_01 - Apache Tomcat 7.0.23 - 2 Gb RAM - Linux 64 bits - Spring 3.1.0 - Apache JMeter 2.6
Киллер фича?
Естественные шаблоны!
Естественные шаблоны
• Валидны как и результирующий документ
• Синтаксис движка не ломает структуры
• Шаблон одновременно и прототип
• Статические = просматриваются в браузере без
вебсервера!
JSP на «вебсервере»
Thymeleaf на «вебсервере»
JSP в браузере
JSP Sucks
Thymeleaf в браузере
Thymeleaf FTW!
Резюмируем
• Быстро и удобно
• Подходит для вёрстки Email
• Идеально для команд, где есть прототипы
• Идеально для соло-разработки шаблонов
• Не silver bullet
• Дружит плотно со Spring
Практика
Инклуды
• th:include
• th:remove
• th:replaceby
• th:fragment
• Вычисление выражений и переменных после вставки фрагмента
th:include=”fragment_file ::fragment_name|[DOM_selector]
DOMSelector
Ограниченный Xpath
• /x - прямой потомок с именем x.
• //x - любой потомок с именем х.
• x[@z="v"] - тэг х с аттрибутом z, равным v.
• x[@z1="v1" and @z2="v2"]
• x[i] - i-ый тэг x.
• x[@z="v"][i]
Статические инклуды
Thymol.js
Ограниченная поддержка инклудов и условных выражений
Стандартный диалект
org.thymeleaf.messageresolver.IMessageResolver
Thymeleaf + Spring
Thymeleaf + Spring
• beans, fields объекты в SpEl
• Интеграция с WebFlow
• Интеграция с Spring Security
• Form binding (th:object)
Расширяемость
• Dialects = JSP Taglibs + i18norg.thymeleaf.dialect.IDialect
• Processors = tags/attributesorg.thymeleaf.processor.Iprocessor
org.thymeleaf.processor.AbstractProcessororg.thymeleaf.processor.attr.AbstractAttrProcessor
org.thymeleaf.processor.element.AbstractElementProcessor
Pitfalls
• Используйте апперкейс DOCTYPE
• Эксепшн с упоминанием Lenient? => Неправильный атрибут/неймспейс
• Эксепшн без номера строки?=> Проблема с конфигурацией
Всё
Mind Map
bit.ly/jtt_thyme_mmap
Я
mailto://[email protected]
skype://mr_mig.by
@mr_mig_by
skype://aliaksei_mihutski