Начало работы с FreeMarker

Java задняя часть сервер FreeMarker

чтоFreeMarker?

FreeMarker — это механизм шаблонов: универсальный инструмент для создания выходного текста (html-страницы, файлы конфигурации, электронные письма, исходный код) на основе шаблонов и источников данных. Это библиотека классов Java, изначально разработанная для создания HTML-страниц в среде веб-разработки шаблона MVC, она не привязана к сервлету или HTML или любому другому веб-материалу. Его также можно использовать в средах, отличных от веб-приложений.

Шаблоны написаны с использованием языка шаблонов FreeMarker (FTL). Использование аналогично выражению EL в JSP. Шаблон фокусируется на том, как отображать данные, а вне шаблона вы можете сосредоточиться на том, какие данные отображать.

зачем использоватьFreeMarker?

  1. FreeMarker выполняет рендеринг на основе моделей данных и шаблонов, отделяя бизнес-логику от уровней представления.При разработке JSP на странице будет много бизнес-логики, что не способствует обслуживанию и чтению.Использование FreeMarker позволяет избежать этой проблемы.

  2. ** Благоприятны для разделения труда и сотрудничества. ** Разработчики HTML могут сосредоточиться на дизайне страницы, не обращаясь к бизнес-логике страницы, и изменять код страницы без необходимости компиляции и повторной компиляции кода программистами.

  3. **Повысить эффективность разработки. **По сравнению с JSP, FreeMarker не нужно перекомпилировать после каждой модификации, поэтому он может эффективно сэкономить время при разработке и отладке.

  4. ** Способствует повышению скорости доступа. **Для страниц, которые не часто меняются, рекомендуется использовать статические страницы, сгенерированные FreeMarker. Вместо страницы JSP, которую нужно динамически генерировать каждый раз.

  5. ** Может увеличить параллелизм. **Например, один контейнер tomcat поддерживает параллелизм только нескольких сотен.Если вы поместите статические страницы на сервер nginx с большей производительностью, он может поддерживать параллелизм десятков тысяч.

  6. Статические страницы более оптимизированы для SEO.

  7. ** Не занимает пространство 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.