Лабораторная работа № 5
ЦЕЛЬ РАБОТЫ
Целью данной лабораторной работы является ознакомление с технологией MVC, а также разработка веб-сайта с использованием «ша- блонизатора» на основе предыдущей лабораторной работы.
ТЕОРЕТИЧЕСКАЯ ЧАСТЬ
Про технологии MVC было подробно рассказано в теоретической части учебно-методического пособия. А сейчас мы подробно рассмотрим тему библиотеки FreeMarker.
FreeMaker — это написанная на Java библиотека, предназначенная для реализации механизма шаблонов. Шаблоны работают с текстом, подставляя в текст значения переменных. Цепочка следующая. Есть исходный текст, он представляет собой HTML с особыми тэгами (выражениями — не HTML, а именно шаблонизатора; язык FreeMaker называется FTL, FreeMaker Template Language). Далее этот текст проходит через некоторый процесс, называемый рендерингом. Выходом является текст. Но в нем воспринимаемые шаблонизатором тэги уже заменены на конкретные значения. На этом этапе обычно остается «чистый» HTML — страница в том виде, в каком она будет передана клиенту.
Структура работы библиотеки FreeMarker хорошо видна на рис. 2.4.

Рис. 2.4. Структура работы библиотеки FreeMarker
Наиболее часто шаблонизатор применяется следующим образом. Создается класс, в котором собирается вся необходимая для отображения информация (изъятая из model MVC). И этот класс используется в качестве основы (контекста) для работы шаблонизатора, для получения HTML из заготовки (шаблона).
Рассмотрим следующий пример. Есть шаблон, текстовый файл с именем ourTemplate.html, содержащий следующую строку.
Данный пример позволяет нам не прописывать статично имя пользователя, а задать его через функцию шаблонизатора.
В Java-классе необходимо выполнить следующие действия.
- 1. HashMap renderContext = new HashMap ();
- 2. renderContext.put ("userName", getCurrentUser O.getName ());
- 3. Template template = fmConfig.getTemplate ("ourTemplate.html");
- 4. StringWriter writer = new StringWriter ();
- 5. template.process (renderContext, writer);
- 6. String html = writer.toString ();
- 7. sendToClient (html);
Создается словарь (HashMap). В элемент с именем userName помещается ФИО текущего пользователя, полученное вызовом функций getCurrentUser O.getName (). Дальше создается объект-шаблон (template) основанный на ранее сформированной конфигурации (fmConfig) из файла outTemplate.html, и к нему применяем операцию process.
На выходе получаем текстовую строку, которая будет содержать примерно следующее: <Ы>Здравствуйте, Иванов Иван Иванович!
Мы оживили страницу, заменив шаблон на реальное значение переменной. Такую HTML-строку можно отправлять.
FreeMaker способен заменять шаблоны на реальное значение переменных — это значит сильно упрощать ситуацию. FreeMaker имеет достаточно развитый язык, позволяющий создавать списки, производить условные переходы и т.д. Кроме того, если чего-то не хватило в самом FTL, можно определить и свои собственные директивы (практически это вряд ли понадобится, но такая возможность есть).
Пример списка, сделанного при помощи механизма шаблонов. Пример шаблона:
- 1. < table >
- 2. <#list Users as u >
3.
4.
5.
6.
- 7. #list>
- 8.