SlideShare a Scribd company logo
Мир без 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

More Related Content

Similar to мир без Jsp. thymeleaf 2.0

Real-time данные на фронтенде
Real-time данные на фронтендеReal-time данные на фронтенде
Real-time данные на фронтенде
EXANTE
 
Erlang for Yandex
Erlang for YandexErlang for Yandex
Erlang for Yandex
Max Lapshin
 
Migrate!
Migrate!Migrate!
Migrate!
sergeymoiseev
 
как учить программировать[1]
как учить программировать[1]как учить программировать[1]
как учить программировать[1]
Pavel Penkov
 
Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Max Lapshin
 
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Ontico
 
Что и почему писать на Erlang
Что и почему писать на ErlangЧто и почему писать на Erlang
Что и почему писать на Erlang
Max Lapshin
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang production
Alina Dolgikh
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language Runtime
GetDev.NET
 
"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец
Fwdays
 
Пишем самый быстрый хеш для кэширования данных
Пишем самый быстрый хеш для кэширования данныхПишем самый быстрый хеш для кэширования данных
Пишем самый быстрый хеш для кэширования данных
Roman Elizarov
 
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruБаба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Yandex
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
Pavel Tsukanov
 
Карта граблей на поле сбора и доставки логов. Lazada-way.
Карта граблей на поле сбора и доставки логов. Lazada-way.Карта граблей на поле сбора и доставки логов. Lazada-way.
Карта граблей на поле сбора и доставки логов. Lazada-way.
Yury Bushmelev
 
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Ontico
 
Excelsior JET в действии
Excelsior JET в действииExcelsior JET в действии
Excelsior JET в действии
Nikita Lipsky
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoFDmitry Buzdin
 
Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!
Roman Dvornov
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianMikhail Davydov
 

Similar to мир без Jsp. thymeleaf 2.0 (20)

Async Python
Async PythonAsync Python
Async Python
 
Real-time данные на фронтенде
Real-time данные на фронтендеReal-time данные на фронтенде
Real-time данные на фронтенде
 
Erlang for Yandex
Erlang for YandexErlang for Yandex
Erlang for Yandex
 
Migrate!
Migrate!Migrate!
Migrate!
 
как учить программировать[1]
как учить программировать[1]как учить программировать[1]
как учить программировать[1]
 
Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.Erlyvideo — сервер потокового видео.
Erlyvideo — сервер потокового видео.
 
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
Игры с виртуализацией в JavaScript, или как я переписал эмулятор, Евгений Пот...
 
Что и почему писать на Erlang
Что и почему писать на ErlangЧто и почему писать на Erlang
Что и почему писать на Erlang
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang production
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language Runtime
 
"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец
 
Пишем самый быстрый хеш для кэширования данных
Пишем самый быстрый хеш для кэширования данныхПишем самый быстрый хеш для кэширования данных
Пишем самый быстрый хеш для кэширования данных
 
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruБаба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
Карта граблей на поле сбора и доставки логов. Lazada-way.
Карта граблей на поле сбора и доставки логов. Lazada-way.Карта граблей на поле сбора и доставки логов. Lazada-way.
Карта граблей на поле сбора и доставки логов. Lazada-way.
 
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
 
Excelsior JET в действии
Excelsior JET в действииExcelsior JET в действии
Excelsior JET в действии
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
 
Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in Russian
 

мир без Jsp. thymeleaf 2.0