Лабораторная работа № 5
Отделить одинаковую (статичную) часть от всех страниц (одна из которых обязательно является меню) в отдельный HTML-файл. На выходе получаем текстовую строку, которая будет содержать примерно следующее: Здравствуйте, Иванов Иван Иванович! Данный пример позволяет нам не прописывать статично имя пользователя, а задать его через функцию шаблонизатора. Рассмотрим следующий пример. Есть шаблон… Читать ещё >
Лабораторная работа № 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, содержащий следующую строку.
Здравствуйте, ${userName}!
Данный пример позволяет нам не прописывать статично имя пользователя, а задать его через функцию шаблонизатора.
В 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.
- 2.
3.
- 7.
- 8.
Строка в таблице фигурирует один раз. Класс контекста мог бы выглядеть следующим образом:
- 1. HashMap context = new HashMap ();
- 2. //Собираем всех пользователей, которых мы хотим получить
- 3. //в таблице на экране — в вектор.
- 4. Vector Users = new Vector ();
- 5. Useru = new User («Иванов», «Иван», «Иванович»); Users. add (ul);
- 6. User u2 = new User («Петров», «Петр», «Петрович»); Users. add
- (u2);
- 7. User u3 = new User («Николаев», «Николай», «Николаевич»); Users. add (u3);
- 8. //Теперь в контекст в качестве именованной переменной помещаем сам вектор.
- 9. context. put («Users», Users);
Полученный после рендеринга HTML будет выглядеть примерно следующим образом:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Иванов | HBaH |
Петров | neTp |
Николаев | Николай |
Отметим две вещи:
- 1) строк в таблице стало столько, сколько элементов в коллекции Users в контексте. Если их будет 100, значит, директива FreeMaker выполнится 100 раз, и получаем HTML с таблицей, состоящей из 100 строк;
- 2) в качестве переменной, которая заменится шаблонизатором на реальное значение, не обязательно должно выступать именно значение. Это может быть и функция, которая вызовется автоматически, и в шаблон будет подставлен результат работы этой функции.
FreeMaker работает с текстом. У него текст на входе и текст на выходе. HTML — это частный случай применения механизма шаблонов. Это может быть и JavaScript, и CSS, и вообще все что угодно. В случае с рендерингом через шаблонизатор JavaScript появляется удобный механизм начального заполнения переменных на клиенте значениями из серверной части.
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ
Постановка задачи:
1. Разобраться с технологией MVC и библиотекой FreeMarker. Используя библиотеку FreeMarker, изменить структуру вашего сайта, результата предыдущей лабораторной работы.
- 1.1. Отделить одинаковую (статичную) часть от всех страниц (одна из которых обязательно является меню) в отдельный HTML-файл.
- 1.2. Все созданные ранее страницы изменить в соответствии с требованиями работы с библиотекой FreeeMarker.
- 2. При организации ответа нужно объединить страницы меню и запрашиваемую страницу с помощью FreeMarker.