Что такое формат файла FTL?
.ftl - это файл FreeMarker Template Language, текстовый шаблон, обрабатываемый движком шаблонов Apache FreeMarker на языке Java. FreeMarker работает на JVM и объединяет статическое содержимое вывода (HTML, XML, обычный текст, SQL, исходный код, электронные письма) с директивами и выражениями FTL для создания окончательного текстового вывода на стороне сервера.
Файл .ftl смешивает три типа синтаксиса: директивы, такие как <#if>, <#list>, <#include>, <#macro> и <#assign>; интерполяции, записываемые как ${expression}; и комментарии FTL в форме <#-- комментарий -->. Все, что находится вне этих конструкций, передается в вывод без изменений.
Необязательная заголовочная директива <#ftl> в верхней части файла может объявлять кодировку файла, формат вывода, правила автоматического экранирования и обработку пробелов. Без нее FreeMarker применяет кодировку и настройки, сконфигурированные глобально в вызывающем Java-приложении.
Наряду с .ftl существуют два специализированных варианта: .ftlh включает автоматическое экранирование HTML, а .ftlx - автоматическое экранирование XML; оба были представлены в FreeMarker 2.3.24. Они снижают риск межсайтового скриптинга (XSS) без необходимости явных вызовов экранирования в каждом шаблоне.
FreeMarker широко используется в веб-фреймворках Java, таких как Spring MVC, Apache Struts и Play Framework, а также в конвейерах генерации кода и системах шаблонов документов. Проект перешел в Apache Software Foundation в 2015 году; текущая версия - FreeMarker 2.3.34 (2024). VS Code и IntelliJ IDEA поддерживают подсветку синтаксиса FTL с помощью плагинов.
Безопасность и защита
РИСК: LOWШаблоны FTL - это обычные текстовые файлы, их безопасно открывать в любом текстовом редакторе. Шаблоны выполняются на стороне сервера на JVM; клиентское выполнение отсутствует. Вредоносные шаблоны потенциально могут выполнять опасные директивы FreeMarker (например, <#assign exec=«freemarker.template.utility.Execute»?new()>), если рендеринг шаблона запущен с небезопасной конфигурацией - это проблема неправильной настройки сервера (Server-Side Template Injection / SSTI), а не риск для конечных пользователей, открывающих файл.
Детали формата
в двух словахПрограммы, открывающие файлы FTL
Технические подробности
глубокая спецификация| Стиль синтаксиса шаблона | На основе директив: директивы `<#tag>` + интерполяции `${expression}`, смешанные со статическим контентом |
| Кодировка по умолчанию | По умолчанию UTF-8; может быть переопределена через атрибут encoding в необязательной заголовочной директиве `<#ftl>` в начале файла |
| Среда выполнения | Java Virtual Machine (JVM); обрабатывается на стороне сервера библиотекой FreeMarker |
| Формат вывода | Любой текстовый формат - HTML, XML, обычный текст, SQL, исходный код, тела электронных писем |
| Категории директив | Управление потоком (`<#if>`, `<#list>`), присваивание (`<#assign>`, `<#local>`), определение (`<#macro>`, `<#function>`), включение (`<#include>`, `<#import>`) |
| Синтаксис интерполяции | `${expression}` (строка/число); `#{number}` поддерживается как устаревшая числовая интерполяция |
| Синтаксис комментариев | `<#-- комментарий -->` - полностью удаляется из отрендеренного вывода |
| Заголовочная директива | Необязательная `<#ftl>` в начале файла; устанавливает encoding, output_format, auto_esc, strip_whitespace, атрибуты |
| Варианты с автоэкранированием | `.ftlh` (автоэкранирование HTML) и `.ftlx` (автоэкранирование XML) - представлены в FreeMarker 2.3.24 |
| Доступ к модели данных | Объекты Java, передаваемые в виде карты (map) из вызывающего приложения; шаблоны читают, но не могут изменять модель |
| Управление пробелами | Настраиваемый `strip_whitespace`; точный контроль с помощью директив `<#t>`, `<#lt>`, `<#rt>` для каждой строки |
| Повторное использование шаблонов | `<#include>` для буквального включения; `<#import>` для библиотек макросов/функций с областью видимости пространства имен |
| Типичный размер файла | 1 КБ - 200 КБ на один файл шаблона |
| Выпущен | circa 2002 (FreeMarker first release) |
| Последняя версия | FreeMarker 2.3.34 (2024); hosted at Apache |
| Открыть стандартное | Да · без роялти |
| Спецификация | freemarker.apache.org |
Конвертации FTL
Вопросы и ответы сообщества
спрошено пользователямиВопросов пока нет - станьте первым, кто спросит о файлах FTL.