28
Мир без JSP. Thymeleaf 2.0

мир без Jsp. thymeleaf 2.0

Embed Size (px)

Citation preview

Page 1: мир без Jsp. thymeleaf 2.0

Мир без JSP.

Thymeleaf 2.0

Page 2: мир без Jsp. thymeleaf 2.0

Что плохого в JSP?

• 2002 год (ajax ещё не назывался ajax`ом)

• Скриплеты

• Невалидный фрагментированный (X)HTML

• «Многобукаф»

• ENVIRONMENT!

• Static HTML -> JSP -> HTML

Page 3: мир без Jsp. thymeleaf 2.0

Идеальный серверный шаблон

• Минимум усилий

• Удовольствие от разработки

• Совместимость с mainstream технологиями

• Скорость разработки

• Скорость генерации страницы

• Фишечки-плюшки

Page 4: мир без Jsp. thymeleaf 2.0

Встречаем Thymeleaf!

Page 5: мир без Jsp. thymeleaf 2.0

Pros

• Низкий порог входа

• Здоровый Open Source + Коммьюнити

• Подходит для насыщенных HTML-писем

• Обрабатывает неполные документы

• Мощный Expression Language

Page 6: мир без Jsp. thymeleaf 2.0

Pros

• ИнтеграцияSpring,Tiles2, SiteMesh, Jawr, Play 1.2 …

• SAX parser + Tailored DOM + Caching

• Расширяемость (кастомные теги/аттрибуты/EL)

• Готов к продакшнPolish Ministry of JusticeBroadleafcommerceSahibinden

Page 7: мир без Jsp. thymeleaf 2.0

Cons

• Непривычный синтаксис

• Медленнее, чем FreeMarker и Velocity

• Нет taglibs (но есть «диалекты»)

• Нет автодополнения в IDE

• Не лучшее решение для сложных страниц (1000+ тегов/итераций)

Page 8: мир без Jsp. thymeleaf 2.0

- 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

Page 9: мир без Jsp. thymeleaf 2.0

Киллер фича?

Естественные шаблоны!

Page 10: мир без Jsp. thymeleaf 2.0

Естественные шаблоны

• Валидны как и результирующий документ

• Синтаксис движка не ломает структуры

• Шаблон одновременно и прототип

• Статические = просматриваются в браузере без

вебсервера!

Page 11: мир без Jsp. thymeleaf 2.0

JSP на «вебсервере»

Page 12: мир без Jsp. thymeleaf 2.0

Thymeleaf на «вебсервере»

Page 13: мир без Jsp. thymeleaf 2.0

JSP в браузере

Page 14: мир без Jsp. thymeleaf 2.0

JSP Sucks

Page 15: мир без Jsp. thymeleaf 2.0

Thymeleaf в браузере

Page 16: мир без Jsp. thymeleaf 2.0

Thymeleaf FTW!

Page 17: мир без Jsp. thymeleaf 2.0

Резюмируем

• Быстро и удобно

• Подходит для вёрстки Email

• Идеально для команд, где есть прототипы

• Идеально для соло-разработки шаблонов

• Не silver bullet

• Дружит плотно со Spring

Page 18: мир без Jsp. thymeleaf 2.0

Практика

Page 19: мир без Jsp. thymeleaf 2.0

Инклуды

• th:include

• th:remove

• th:replaceby

• th:fragment

• Вычисление выражений и переменных после вставки фрагмента

Page 20: мир без Jsp. thymeleaf 2.0

th:include=”fragment_file ::fragment_name|[DOM_selector]

Page 21: мир без Jsp. thymeleaf 2.0

DOMSelector

Ограниченный Xpath

• /x - прямой потомок с именем x.

• //x - любой потомок с именем х.

• x[@z="v"] - тэг х с аттрибутом z, равным v.

• x[@z1="v1" and @z2="v2"]

• x[i] - i-ый тэг x.

• x[@z="v"][i]

Page 22: мир без Jsp. thymeleaf 2.0

Статические инклуды

Thymol.js

Ограниченная поддержка инклудов и условных выражений

Page 23: мир без Jsp. thymeleaf 2.0

Стандартный диалект

org.thymeleaf.messageresolver.IMessageResolver

Page 24: мир без Jsp. thymeleaf 2.0

Thymeleaf + Spring

Page 25: мир без Jsp. thymeleaf 2.0

Thymeleaf + Spring

• beans, fields объекты в SpEl

• Интеграция с WebFlow

• Интеграция с Spring Security

• Form binding (th:object)

Page 26: мир без Jsp. thymeleaf 2.0

Расширяемость

• 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

Page 27: мир без Jsp. thymeleaf 2.0

Pitfalls

• Используйте апперкейс DOCTYPE

• Эксепшн с упоминанием Lenient? => Неправильный атрибут/неймспейс

• Эксепшн без номера строки?=> Проблема с конфигурацией

Page 28: мир без Jsp. thymeleaf 2.0

Всё

Mind Map

bit.ly/jtt_thyme_mmap

Я

mailto://[email protected]

skype://mr_mig.by

@mr_mig_by

skype://aliaksei_mihutski