Мир без 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 Justice
     Broadleafcommerce
     Sahibinden
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 + i18n
                                  org.thymeleaf.dialect.IDialect



• Processors = tags/attributes
                                   org.thymeleaf.processor.Iprocessor
                            org.thymeleaf.processor.AbstractProcessor
                   org.thymeleaf.processor.attr.AbstractAttrProcessor
           org.thymeleaf.processor.element.AbstractElementProcessor
Pitfalls
• Используйте апперкейс DOCTYPE

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

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



Mind Map                                    Я
bit.ly/jtt_thyme_mmap   mailto://alexey.migutsky@gmail.com
                        skype://aliaksei_mihutski
                        skype://mr_mig.by
                        @mr_mig_by

мир без Jsp. thymeleaf 2.0