чтоFreeMarker?
FreeMarker — это механизм шаблонов: универсальный инструмент для создания выходного текста (html-страницы, файлы конфигурации, электронные письма, исходный код) на основе шаблонов и источников данных. Это библиотека классов Java, изначально разработанная для создания HTML-страниц в среде веб-разработки шаблона MVC, она не привязана к сервлету или HTML или любому другому веб-материалу. Его также можно использовать в средах, отличных от веб-приложений.
Шаблоны написаны с использованием языка шаблонов FreeMarker (FTL). Использование аналогично выражению EL в JSP. Шаблон фокусируется на том, как отображать данные, а вне шаблона вы можете сосредоточиться на том, какие данные отображать.
зачем использоватьFreeMarker?
-
FreeMarker выполняет рендеринг на основе моделей данных и шаблонов, отделяя бизнес-логику от уровней представления.При разработке JSP на странице будет много бизнес-логики, что не способствует обслуживанию и чтению.Использование FreeMarker позволяет избежать этой проблемы.
-
** Благоприятны для разделения труда и сотрудничества. ** Разработчики HTML могут сосредоточиться на дизайне страницы, не обращаясь к бизнес-логике страницы, и изменять код страницы без необходимости компиляции и повторной компиляции кода программистами.
-
**Повысить эффективность разработки. **По сравнению с JSP, FreeMarker не нужно перекомпилировать после каждой модификации, поэтому он может эффективно сэкономить время при разработке и отладке.
-
** Способствует повышению скорости доступа. **Для страниц, которые не часто меняются, рекомендуется использовать статические страницы, сгенерированные FreeMarker. Вместо страницы JSP, которую нужно динамически генерировать каждый раз.
-
** Может увеличить параллелизм. **Например, один контейнер tomcat поддерживает параллелизм только нескольких сотен.Если вы поместите статические страницы на сервер nginx с большей производительностью, он может поддерживать параллелизм десятков тысяч.
-
Статические страницы более оптимизированы для SEO.
-
** Не занимает пространство PermGen JVM. **Поскольку он не будет скомпилирован в класс, он не будет занимать вечное пространство генерации веб-сервера, что позволяет избежать проблемы OutOfMemoryError: пространство PermGen.
как пользоватьсяFreeMarker?
использовать в java
@Test
public void testFreeMarker() throws Exception {
// 把freemarker的jar包添加到工程中
//创建一个Configuration对象
Configuration configuration = new Configuration(Configuration.getVersion());
// 告诉config对象模板文件存放的路径。
configuration.setDirectoryForTemplateLoading(new File("ftl directory absolute path"));
// 设置config的默认字符集。一般是utf-8
configuration.setDefaultEncoding("utf-8");
//从config对象中获得模板对象。需要制定一个模板文件的名字。
Template template = configuration.getTemplate("test.ftl");
//创建模板需要的数据集。可以是一个map对象也可以是一个pojo,把模板需要的数据都放入数据集。
Map root = new HashMap<>();
root.put("hello", "hello freemarker");
//创建一个Writer对象,指定生成的文件保存的路径及文件名。
Writer out = new FileWriter(new File("out html file absolute path"));
//调用模板对象的process方法生成静态文件。需要两个参数数据集和writer对象。
template.process(root, out);
//关闭writer对象。
out.flush();
out.close();
}
загрузчик шаблонов
Конечно, вы также можете использовать загрузчик шаблонов без указания абсолютного пути.FreeMarker предоставляет загрузчик шаблонов для загрузки шаблонов непосредственно из источника данных.
-
ClassTemplateLoader: загружать шаблоны из пути к классам.
-
FileTemplateLoader: загружает шаблон из указанной папки в файловой системе.
-
StringTemplateLoader: загружает шаблоны из карты строк.
-
URLTemplateLoader: загрузка шаблона из URL-адреса. Вы должны реализовать метод getURL.
-
WebappTemplateLoader: загружает шаблоны из контекста сервлета.
Как пользоваться:
Configuration configuration = new Configuration();
configuration.setTemplateLoader(
new WebappTemplateLoader(servletContext, "WEB-INF/content"));
использовать в проекте
Если вы используете его в проекте, вы можете напрямую разместить его в фреймворке.
добавить зависимости
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
настроить весну
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/ftl/" />
<property name="defaultEncoding" value="UTF-8" />
</bean>
Затем получите объект Configuration из FreeMarkerConfigurer при использовании:
Configuration configuration = freeMarkerConfigurer.getConfiguration();
Базовый синтаксис FreeMarker
простой тип
Используйте что-то вроде выражений EL.
${hello}
тип упаковки
<html>
<head>
<title>${title}</title>
</head>
<body>
<label>学号:</label>${student.id}<br>
<label>姓名:</label>${student.name}<br>
</body>
</html>
перебирать коллекцию/массив
<#list people as p>
${p.id}/${p.name}
</#list>
Получить текущий индекс итерации
<#list people as p
${p_index}
</#list>
Добавить условие суждения
<#if 条件>
<#else>
</#if>
тип даты
#默认格式
1:date
${cur_time?date}
2:datetime
${cur_time?datetime}
3:time
${cur_time?time}
#自定义格式
${cur_time?string("yyyy-MM-dd HH:mm:ss")}
Обработка нулевых значений
map.put("val",null)
val值为:${val!}
Когда val пуст, он отображается как пустая строка, т.е.
val值为:
Вы также можете указать значение по умолчанию, когда значение пусто.
${val!"默认值"}
Вы также можете использовать условные операторы, чтобы делать ненулевые суждения.
<#if curdate ??>
当前日期:${curdate?string("yyyy/MM/dd HH:mm:ss")}
<#else>
curdate属性为null
</#if>
include
Могут быть введены дополнительные фрагменты шаблона.
<#include "/include/head.ftl">
поддержка json
?eval
Вы можете преобразовать строки в объекты json и использовать их в качестве типов-оболочек в шаблонах.
<#assign user = userString?eval>
User:${user.name}
общая переменная
Данные, которые автоматически добавляются во все шаблоны, можно настроить так, чтобы они были доступны во всех шаблонах.
configuration.setSharedVariable("share_value_key", "share_value");
Пополнить
-
Страницы, на которых необходимо использовать FreeMarker, должны обновляться вовремя при обновлении базы данных, иначе пользователь зайдет на страницу с истекшим сроком действия.
-
Ключ карты модели данных FreeMarker может быть только типа String.