Java — Вопрос по шаблонизатору (Freemarker)


Содержание

java — Freemarker шаблонизатор в war файле

Нужно сделать так чтобы в war файле был класс который обрабатывал статичные страницы шаблонов, как указать шаблонизатору правильный путь к папке с шаблонами, пробовал несколько разных способов как в мануале.

Как правильно прописать в конструкторе инициализацию папки с шаблонами?

В логе томкэта исключение

freemarker.template.TemplateNotFoundException: Template not found for name «user _ ).

    2 1
  • 13 янв 2020 2020-01-13 17:22:51
  • fxrbfg

1 ответ

Для начала Вам не следует делать инициализацию в конструкторе, отделите ее в метод инициализации:

Чтобы выполнить инициализацию конфигурации Freemarker внутри Tomcat потребуется использовать ServletContext для разрешения пути.

Операции с контекстом уместно обработать внутри слушателя:

FreeMarker tutorial

This is an introductory tutorial of the FreeMarker Java template engine. We introduce the FreeMarker template engine and create several console and web applications. Maven is used to build our examples. NetBeans is used to manage the applications.

Table of contents

is a template engine for the Java programming language. Templates are written in the FreeMarker Template Language (FTL). FreeMarker’s home page is freemarker.org.

FreeMarker template engine

A template engine combines static data with dynamic data to produce content. A template is an intermediate representation of the content; it specifies how the output will be generated.

The advantages of a template engine are:

  • separation of concerns,
  • avoiding repetition of code,
  • easier switching between views,
  • reusability.

A FreeMarker template file has by convention a .ftl extension.

FreeMarker is not restricted to templates for HTML pages; it can be used to generate e-mails, configuration files, source code etc.

FreeMarker console applications

The first two applications are console applications. We create new Maven Java Applications in NetBeans. They use the following Maven build file:

In the Maven pom.xml file, we specify the FreeMarker dependency.

FreeMarker interpolations

Interpolations are expressions put between the $ < >characters. FreeMarker will replace an interpolation in the output with the actual value of the expression inside the curly brackets.

In the following example, we use a FreeMarker template file to generate simple text output.


Figure: Java console project structure in NetBeans

This is the project structure in NetBeans.

The example prints a simple text to the console. The final text was processed by a template engine.

Configuration is used to set the FreeMarker settings; it takes the version of the FreeMarker library as a parameter.

The setClassForTemplateLoading() sets the class whose method will be used to load templates.

With the getTemplate() method, we retrieve the test.ftl template file.

The data model is created. The data from the model will be dynamically placed into the FreeMarker template file.

The process() method executes the template, using the provided data model and writing the generated output to the supplied writer.

The test.ftl template file contains one interpolation; it will be replaced with the generated string.

This is the output of the application.

Listing a collection with FreeMarker

The #list directive lists a collection of data.

The next example produces a list of cars.

We have a Car bean. It has two attributes: name and price.

This example is a Java console program, which uses FreeMarker to dynamically create a text output containing a list of cars.

Here we create an ArrayList of Car objects and put it into the data model.

The template file contains a #list directive which prints the attributes of the car objects; the attributes are accessed with the dot character.

This is the output of the example.

FreeMarker directives

FreeMarker directives are special tags that perform an action. There are two kinds of directives: built-in and custom.

The tag creates a new plain variable. It can be accessed with the $<> construct. The variable is created in the template. If there is an equally named variable in the data model, the template variable hides it.

The directive creates a new name variable. The value of the variable is printed with the $ syntax.

The example prints this line.

Conditional processing of template sections can be done with he , , and directives.

The example creates a new value variable and uses conditional directives to test the value.

This is the output.

The directive is used for traversing a sequence.

In the example, we assing a new sequence of colour names to the colours variable. The directive goes through the collection and prints each item.

The example gives this output.

In this example, we create a hash variable and use the to output the values and the keys of the hash.

The example gives this output.


The directive removes superfluous white-space when we use a white-space insensitive format (e.g. HTML or XML)

We have text with spaces, tabs, and new lines.

The program removed all superfluous white-space.

FreeMarker servlet example

In the following example, we use FreeMarker in a standard Java web application. The application is packed into a war file and deployed on the NetBeans’s build-in Tomcat server.

In NetBeans, we create a new Maven Web Application.

Figure: FreeMarker servlet project structure in NetBeans

This is the project structure of the FreeMarker servlet example in NetBeans.

In the pom.xml file, we have these two dependencies.

This is the context.xml file.

In the web.xml file, we set up and configure the FreeMarker servlet. Refer to the FreeMarker documentation for the explanation of each of the options.

This is the Car bean having basic data about a car object.

We set up the servlet and dispatch to the template file. We create an ArrayList of cars and set it to the request.

The index.ftl file is located in the src/main/webapp directory. With the #list directive, we show all the elements of the cars collection.

Figure: FreeMarker servlet example

We show the application output in the Opera web browser. The built-in Tomcat in NetBeans operates on the 8084 port.

FreeMarker with Spark

is a simple and lightweight Java web framework built for rapid development. Spark runs on an embedded Jetty web server by default, but can be configured to run on other webservers. To integrate FreeMarker with Spark, we use spark-template-freemarker , the Freemarker Template Engine implementation for Spark.

This is the project structure.

The pom.xml file contains dependencies for Spark modules and FreeMarker.

We set up the same application for FreeMarker.

We configure FreeMarker with the Configuration class. The template files are going to be placed into the views directory, which must be located on the classpath.

The FreeMarkerEngine is passed to the get() method.

The ModelAndView is used to set the name of the view and the model object to be rendered.

This is the hello.ftl template file; it refers to the name variable which was passed with the ModelAndView object.

We build the project with mvn package command.

We run the program. The maven-assembly-plugin allows to create an executable JAR with all dependencies.

This is the output.

Цукерберг рекомендует:  4 простых способа реализации адаптивной сеточной разметки

FreeMarker with Spring

is a popular Java application framework. is a product of an effort to create stand-alone, production-grade Spring based applications with minimal effort.

Classic Spring application


In the following example, we integrate FreeMarker into a classic Spring application.

This is the project structure of our classic Spring application.

The pom.xml file contains dependencies for Spring modules and FreeMarker.

In the web.xml file, we define Spring DispatcherServlet , which is the central dispatcher for HTTP request handlers.

In the spring servlet context XML file we define two beans: freemarkerConfig and viewResolver . These are configuration beans for FreeMarker. The spring-servlet.xml is located in WEB-INF .

Spring will scan for components in the com.zetcode package.

The element registers a PropertySourcesPlaceholderConfigurer , which allows to set properties with the @Value annotation. The location attribute tells where to look for properties.

In the my.properties file we have one key/value pair. The value is the version of the application. The file is located in the usr/main/resources directory.

The IVersionService interface contains one method contract: getVersion() .

The VersionService returns the version of the application.

The value from the app.version key, located in the my.properties file, is injected into the appVersion attribute.

This is the controller class.

In the version method, which is called when a request with /version URL arrives, we call the VersionService’s getVersion() method and pass the value into the ModelAndView . The processing is dispatched to the version.ftl template file, where the version value is inserted.

This is the index.ftl file. It has an link which sends a request to the server to get the version of the application.

The version.ftl template file is used to build the server response to the client.

Spring Boot web application using FreeMarker

In the next application, we integrate FreeMarker into a Spring Boot web application.

Figure: Spring Boot web project structure in NetBeans

This is the project structure of the Spring Boot web application using FreeMarker in NetBeans. Note that we are creating a Java SE Maven application in NetBeans, not a Java web Maven application. This is because we have Tomcat embedded into our JAR file.

This is the Maven build file. It includes dependencies for Spring Boot and FreeMarker. There is no need to configure the FreeMarker in Spring Boot. Upon finding the FreeMarker dependency in the POM file, Spring Boot automatically takes care of the configuration. The spring-boot-maven-plugin creates an executable JAR with an embedded container (Tomcat by default).

The Application sets up the Spring Boot application. The @SpringBootApplication annotation does three things: 1) defines the class as a configuration class, 2) enables auto-configuration, 3) enables component scanning.

This is the controller class for the Spring Boot web application. The controller has two mappings. The first mapping resolves to the index.ftl file and the second mapping to the hello.ftl file.

This is the index.ftl file. It has an HTML form which sends a message to the server.

The server responds with a message back to the client. The response is created from the hello.ftl template file.

Figure: Spring Boot web example

The Spring Boot starts an embedded Tomcat server, listening on port 8080.

Не линкуются css и js файлы в шаблонизатор freemarker.template

Всем привет! Пишу веб приложения. Использую сервлет, jetty и freemarker для генерации html шаблона. При запуске программы, страница отображается корректно, но если добавить стиля css через отдельный файл, то он не применяется, а через инструменты разработчика (в браузере ), файл css`шный пустой(

Собственно вопрос, как правильно добавить css файл в шаблон? Если нужен будет код, скажите, напишу.

css добавляю так:


contextPath в принципе не передается — пусто. Изменил немного структуру, добавил просто файлик style.css с изменением цвета .body

Что может видеть браузер?

Где находится material.css относительно page.html? href=»templates/library/material/material.css»

Лучше когда получается такая итоговая структура

Как я могу вызвать java-методы для объекта из шаблона FreeMarker?

39 Graham [2009-09-01 15:55:00]

Можно ли вызвать метод, который принимает параметры из шаблона Freemarker?

У меня есть объектная модель, которую я пытаюсь сделать с помощью Freemarker на веб-странице. У одного из объектов есть способ получить подсписку его содержимого — с помощью параметра, который используется для фильтрации списка:

public List getunits(final String type);

Я знаю, что в JSP вы не можете сделать это напрямую, но вы можете написать пользовательские функции, которые позволят вам достичь желаемого результата. Как вы решаете это во Фримаркере? То же самое с написанием пользовательских функций? Или существует какой-то способ называть эту функцию?

2 ответа

33 Решение ChssPly76 [2009-09-02 01:43:00]

FreeMarker позволяет вызывать методы, которые были доступны через модель из выражений.

Предполагая, что ваш объект был открыт как myBean , вы можете вызвать метод следующим образом:

Вам не нужно использовать
, конечно же, это просто как пример, так как ваш метод возвращает список.

20 monzonj [2011-01-17 18:02:00]

Как сказал ChssPly76, вы можете просто сформировать вызов метода из шаблона Freemarker, если вы выставите объект в модели.

Но важно помнить, что если ваш метод возвращает NULL (по какой-либо причине), вы получите путаную

EasyJava

Java в примерах для начинающих

FreeMarker в Spring Web MVC

В прошлой статье я показывал, как генерировать статические веб страницы с помощью Spring Wev MVC и отдавать их браузеру. Тот пример был основан на довольно старой технологии JSP, которая хоть и поддерживается, но её использование крайне неудобно и может вызвать преждевременную деменцию.

Современная альтернатива JSP — шаблонизаторы. Идея в общем-то таже самая: вы пишете html код в который в разных местах вставляете метки для установки переменных. Перед выдачей страницы по запросу вы берёте шаблон, записываете значения в переменные и отдаёте их шаблонизатору, который подставляет значения в шаблон и генерирует финальную страницу.

FreeMarker, один из современных шаблонизаторов, весьма богатый возможностями, гибкий и надёжный. К сожалению в этой статье я не смогу описать особенности самого FreeMarker, но согу написать о поддержке FreeMarker в Spring Web MVC. Для примера я перепишу код из статьи о JSP с использованием FreeMarker

Настройка FreeMarker

Чтобы включить FreeMarker в Spring Boot, необходимо добавить следующую зависимость к проекту:

Зачем мне использовать шаблонизатор? jsp include и jstl против плиток, freemarker, скорость, sitemesh

Я собираюсь выбрать способ организации своего представления (с spring-mvc, но это не должно иметь большого значения)

Насколько я вижу, есть 6 вариантов (хотя они не являются взаимоисключающими):

Плитки и Sitemesh могут быть сгруппированы; так может Freemarker и скорость . Какой из них в каждой группе использовать, не является предметом обсуждения, есть достаточно вопросов и дискуссий по этому поводу.


Это интересное чтение , но я не могу убедить меня в использовании плиток.

Мой вопрос — что дают эти фреймворки, что не может быть правильно сделано с помощью и JSTL. Основные моменты (некоторые взяты из статьи):

Включая части страниц, такие как верхний и нижний колонтитулы — нет разницы между:

Определение параметров в заголовке, таких как заголовок, метатеги и т. Д. Это очень важно, особенно с точки зрения SEO. С помощью шаблонов вы можете просто определить заполнитель, который должна определять каждая страница. Но вы можете сделать это в jsp с JSTL , используя (на странице включения) и (на странице включения)

Реорганизация макета — если вы хотите переместить крошку над меню или поле входа над другой боковой панелью. Если включения страниц (с jsp) не организованы должным образом, в таких случаях вам может потребоваться изменить каждую страницу. Но если ваш макет не слишком сложен, и вы помещаете общие элементы в верхний / нижний колонтитул, вам не о чем беспокоиться.

Связь между общими компонентами и конкретным контентом — я не вижу проблем с этим. Если вы хотите повторно использовать какой-либо фрагмент, переместите его на страницу, на которой нет верхнего или нижнего колонтитула, и добавьте его, где это необходимо.

Эффективность — более эффективен, чем что-либо еще, потому что он компилируется один раз. Все остальные параметры анализируются / выполняются много раз.

Сложность — для всех решений, не относящихся к jsp, требуются дополнительные xml-файлы, дополнительные включения, конфигурации препроцессора и т. Д. Это и кривая обучения, и введение большего количества потенциальных точек отказа. Кроме того, это делает поддержку и изменение более утомительным — вы должны проверить несколько файлов / конфигураций, чтобы понять, что происходит.

Цукерберг рекомендует:  Хочу всё знать. Язык Ада

Заполнители — скорость / freemarker дают что-то большее, чем JSTL? В JSTL вы помещаете заполнитель и используете модель (помещенную в запрос или область сеанса контроллерами) для заполнения этих заполнителей.

Итак, убедите меня, что я должен использовать любую из вышеперечисленных платформ вместо / в дополнение к простой JSP.

7 ответов

Несколько аргументов для скорости (я не использовал Freemarker):

  • Возможность повторного использования шаблонов вне веб-контекста, например, при отправке электронных писем
  • Синтаксис языка шаблонов Velocity намного проще, чем JSP EL или библиотеки тегов.
  • Строгое разделение логики представления от любой другой логики — невозможно выбрать использование тегов скриптлета и выполнение неприятных действий в ваших шаблонах.

Заполнители — скорость / freemaker дают что-то большее, чем JSTL? В JSTL вы помещаете заполнитель и используете модель (помещенную в запрос или область сеанса контроллерами) для заполнения этих заполнителей.

Да, ссылки действительно являются основой VTL:

Эффективность — более эффективен, чем что-либо еще, потому что он компилируется один раз. Все остальные параметры анализируются / выполняются много раз.

Не уверен, что я согласен или понимаю этот момент. Velocity имеет возможность кэшировать шаблоны, то есть абстрактное синтаксическое дерево, в которое они анализируются, будет кэшироваться, а не считываться с диска каждый раз. В любом случае (и у меня нет четких цифр для этого), Velocity всегда чувствовала себя быстро для меня.

Реорганизация макета — если вы хотите переместить крошку над меню или поле входа над другой боковой панелью. Если включения страниц (с jsp) не организованы должным образом, в таких случаях вам может потребоваться изменить каждую страницу. Но если ваш макет не слишком сложен, и вы помещаете общие элементы в верхний / нижний колонтитул, вам не о чем беспокоиться.

Разница в том, что при JSP-подходе вы не реорганизуете этот макет в каждом файле JSP, в котором используется один и тот же верхний и нижний колонтитулы? Tiles и SiteMesh позволяют вам указать базовую страницу макета (JSP, шаблон Velocity и т. Д. — обе они являются основой JSP), где вы можете указать все, что захотите, а затем просто делегировать фрагмент / шаблон «контента» для основного контента. , Это означает, что будет только один файл для перемещения заголовка.

Spark — Потрясающий веб-микрофреймворк для Java

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

Небольшое вступление

Spark — это просто чудесный микрофреймворк для создания веб-приложений на джаве без особых усилий. Spark стремится к простоте и обеспечивает только минимальный набор функций. Тем не менее он предоставляет все необходимое для создания веб-приложения, которые поместятся в несколько строк кода. С синтаксисом, вдохновленным Sinatra, код выглядит очень чистым.

Давайте начнем со вездесущого хеллоуворлда. Создаём новый проект и импортируем Spark. Лично я использую maven для управления зависимостями.

Добавляем в pom.xml.

Теперь приступим непосредственно к «хеллоу ворлду».

import static spark.Spark.*;
public class Main <
public static void main(String[] args) <
get(«/hello», (req, res) -> «Hello, World!»);
>
>

Вот и всё. Всё настолько просто!

Теперь spark прослушивает GET запросы на /hello. Всякий раз, когда мы переходим на localhost:4567/hello, вызывается метод handle(). Внутри него мы возвращаем объект, который должен быть отправлен клиенту (в этом случае «Hello World»).

Лично мое мнение, что данный код настолько лаконичный, что даже не требует пояснений.

Стоп-стоп. Что насчет запуска/остановки сервера?


Остановка — надо всего лишь вызвать метод stop().

Запуск — а вот здесь все интересно. Сервер автоматически запускается, когда вы делаете что-то, что требует запуска сервера (я знаю что звучит действительно странно). Но можно запустить и вручную, вызвав метод init().

Хотел бы затронуть такую тему как шаблонизаторы. Спарк имеет большую нативную поддержку оных. А именно:

Для всех них есть «обёртки» от спарка. Для примера давайте рассмотрим мой любимый Freemarker.

Для начала давайте импортируем доп. зависимость.

Как FreeMarker поможет быстро сделать HTML-отчет на базе шаблона ( + конвертация в PDF)

Apache FreeMarker это Java-библиотека (лицензия — Apache 2.0) для генерации различных текстовых форматов (HTML, e-mails, конфигурационные файлы, исходные коды, и т.д.) которая базируется на шаблонах и меняющихся входных данных.

Шаблоны пишутся на FreeMarker Template Language (FTL), который будет понятен не только программисту, но, например и верстальщику.

Моделью данных может выступать, к примеру HashMap с String, Number, POJO внутри или, например, при чуть больших усилях JSON.

Фишка в том, что движок FreeMarker-a позволяет воспользоваться не только набором стандартных функций и конструкций (условия, циклы, работа с числами и строками), но и расширить шаблон вызовами своих функций (пример — конвертация числа в строку прописью, транслитерация строки и проч.).
Кроме того, есть code-completion в IDEA/Eclipse, что при наличии оных позволяет «быстрее» разрабатывать.

Итого, чтобы сгенерировать отчет, необходимо:
1) Сконфигурировать движок:

2) Создать модель данных:

Собственно Java Bean (класс должен быть public и иметь соотв. getter-ы):

3) Получить шаблон через экземпяр Configuration (файл test.ftlh должен быть создан и находится в /where/you/store/templates, который мы указали на первом шаге):

4) Свести шаблон и данные, выведем в stdout:

Дополнительно:
1) Список встроенных функций
2) Как написать свою функцию
3) Как сконвертировать полученный, например, HTML в PDF при помощи flyingsaucer:

объект чтения java, который приводит к templateexception в шаблонизатора по freemarker

Я пишу программу на Java, чтобы генерировать выходные файлы, используя шаблон по Freemarker. У меня есть список объектов, которые я пишу в файл с помощью по Freemarker. Е. Г. Мой объект Java является работником, имеющим имени, lname В и возраст. Я использую следующий фрагмент кода, чтобы генерировать выходной файл:

Теперь, я использую пользовательский обработчик исключений шаблонов, обработка исключений в случае имени, lname в возрасте или отсутствует в объект employee.

Я хочу прочитать объект employee, который бросает исключение в классе FreemarkerExceptionHandler, но я не могу его прочитать. Я использую следующий код, чтобы прочитать список сотрудников, но я получаю всех сотрудников, а не одного конкретного работника, которые приводят к этой ошибке.

Может кто-нибудь подтвердить, если это возможно в Freemarker, чтобы поймать объект, которые приводят к исключению.

© 2020 — Вопросы и ответы по программированию

FreeMarker tutorial

This is an introductory tutorial of the FreeMarker Java template engine. We introduce the FreeMarker template engine and create several console and web applications. Maven is used to build our examples. NetBeans is used to manage the applications.

Table of contents

is a template engine for the Java programming language. Templates are written in the FreeMarker Template Language (FTL). FreeMarker’s home page is freemarker.org.

FreeMarker template engine

A template engine combines static data with dynamic data to produce content. A template is an intermediate representation of the content; it specifies how the output will be generated.

The advantages of a template engine are:

  • separation of concerns,
  • avoiding repetition of code,
  • easier switching between views,
  • reusability.


A FreeMarker template file has by convention a .ftl extension.

FreeMarker is not restricted to templates for HTML pages; it can be used to generate e-mails, configuration files, source code etc.

FreeMarker console applications

The first two applications are console applications. We create new Maven Java Applications in NetBeans. They use the following Maven build file:

In the Maven pom.xml file, we specify the FreeMarker dependency.

FreeMarker interpolations

Interpolations are expressions put between the $ < >characters. FreeMarker will replace an interpolation in the output with the actual value of the expression inside the curly brackets.

In the following example, we use a FreeMarker template file to generate simple text output.

Figure: Java console project structure in NetBeans

This is the project structure in NetBeans.

The example prints a simple text to the console. The final text was processed by a template engine.

Цукерберг рекомендует:  Создание RESTful API на Lumen

Configuration is used to set the FreeMarker settings; it takes the version of the FreeMarker library as a parameter.

The setClassForTemplateLoading() sets the class whose method will be used to load templates.

With the getTemplate() method, we retrieve the test.ftl template file.

The data model is created. The data from the model will be dynamically placed into the FreeMarker template file.

The process() method executes the template, using the provided data model and writing the generated output to the supplied writer.

The test.ftl template file contains one interpolation; it will be replaced with the generated string.

This is the output of the application.

Listing a collection with FreeMarker

The #list directive lists a collection of data.

The next example produces a list of cars.

We have a Car bean. It has two attributes: name and price.

This example is a Java console program, which uses FreeMarker to dynamically create a text output containing a list of cars.

Here we create an ArrayList of Car objects and put it into the data model.

The template file contains a #list directive which prints the attributes of the car objects; the attributes are accessed with the dot character.

This is the output of the example.

FreeMarker directives

FreeMarker directives are special tags that perform an action. There are two kinds of directives: built-in and custom.

The tag creates a new plain variable. It can be accessed with the $<> construct. The variable is created in the template. If there is an equally named variable in the data model, the template variable hides it.

The directive creates a new name variable. The value of the variable is printed with the $ syntax.


The example prints this line.

Conditional processing of template sections can be done with he , , and directives.

The example creates a new value variable and uses conditional directives to test the value.

This is the output.

The directive is used for traversing a sequence.

In the example, we assing a new sequence of colour names to the colours variable. The directive goes through the collection and prints each item.

The example gives this output.

In this example, we create a hash variable and use the to output the values and the keys of the hash.

The example gives this output.

The directive removes superfluous white-space when we use a white-space insensitive format (e.g. HTML or XML)

We have text with spaces, tabs, and new lines.

The program removed all superfluous white-space.

FreeMarker servlet example

In the following example, we use FreeMarker in a standard Java web application. The application is packed into a war file and deployed on the NetBeans’s build-in Tomcat server.

In NetBeans, we create a new Maven Web Application.

Figure: FreeMarker servlet project structure in NetBeans

This is the project structure of the FreeMarker servlet example in NetBeans.

In the pom.xml file, we have these two dependencies.

This is the context.xml file.

In the web.xml file, we set up and configure the FreeMarker servlet. Refer to the FreeMarker documentation for the explanation of each of the options.

This is the Car bean having basic data about a car object.

We set up the servlet and dispatch to the template file. We create an ArrayList of cars and set it to the request.

The index.ftl file is located in the src/main/webapp directory. With the #list directive, we show all the elements of the cars collection.

Figure: FreeMarker servlet example

We show the application output in the Opera web browser. The built-in Tomcat in NetBeans operates on the 8084 port.

FreeMarker with Spark

is a simple and lightweight Java web framework built for rapid development. Spark runs on an embedded Jetty web server by default, but can be configured to run on other webservers. To integrate FreeMarker with Spark, we use spark-template-freemarker , the Freemarker Template Engine implementation for Spark.

This is the project structure.

The pom.xml file contains dependencies for Spark modules and FreeMarker.

We set up the same application for FreeMarker.

We configure FreeMarker with the Configuration class. The template files are going to be placed into the views directory, which must be located on the classpath.


The FreeMarkerEngine is passed to the get() method.

The ModelAndView is used to set the name of the view and the model object to be rendered.

This is the hello.ftl template file; it refers to the name variable which was passed with the ModelAndView object.

We build the project with mvn package command.

We run the program. The maven-assembly-plugin allows to create an executable JAR with all dependencies.

This is the output.

FreeMarker with Spring

is a popular Java application framework. is a product of an effort to create stand-alone, production-grade Spring based applications with minimal effort.

Classic Spring application

In the following example, we integrate FreeMarker into a classic Spring application.

This is the project structure of our classic Spring application.

The pom.xml file contains dependencies for Spring modules and FreeMarker.

In the web.xml file, we define Spring DispatcherServlet , which is the central dispatcher for HTTP request handlers.

In the spring servlet context XML file we define two beans: freemarkerConfig and viewResolver . These are configuration beans for FreeMarker. The spring-servlet.xml is located in WEB-INF .

Spring will scan for components in the com.zetcode package.

The element registers a PropertySourcesPlaceholderConfigurer , which allows to set properties with the @Value annotation. The location attribute tells where to look for properties.

In the my.properties file we have one key/value pair. The value is the version of the application. The file is located in the usr/main/resources directory.

The IVersionService interface contains one method contract: getVersion() .

The VersionService returns the version of the application.

The value from the app.version key, located in the my.properties file, is injected into the appVersion attribute.

This is the controller class.

In the version method, which is called when a request with /version URL arrives, we call the VersionService’s getVersion() method and pass the value into the ModelAndView . The processing is dispatched to the version.ftl template file, where the version value is inserted.

This is the index.ftl file. It has an link which sends a request to the server to get the version of the application.

The version.ftl template file is used to build the server response to the client.

Spring Boot web application using FreeMarker

In the next application, we integrate FreeMarker into a Spring Boot web application.

Figure: Spring Boot web project structure in NetBeans

This is the project structure of the Spring Boot web application using FreeMarker in NetBeans. Note that we are creating a Java SE Maven application in NetBeans, not a Java web Maven application. This is because we have Tomcat embedded into our JAR file.

This is the Maven build file. It includes dependencies for Spring Boot and FreeMarker. There is no need to configure the FreeMarker in Spring Boot. Upon finding the FreeMarker dependency in the POM file, Spring Boot automatically takes care of the configuration. The spring-boot-maven-plugin creates an executable JAR with an embedded container (Tomcat by default).

The Application sets up the Spring Boot application. The @SpringBootApplication annotation does three things: 1) defines the class as a configuration class, 2) enables auto-configuration, 3) enables component scanning.

This is the controller class for the Spring Boot web application. The controller has two mappings. The first mapping resolves to the index.ftl file and the second mapping to the hello.ftl file.

This is the index.ftl file. It has an HTML form which sends a message to the server.

The server responds with a message back to the client. The response is created from the hello.ftl template file.

Figure: Spring Boot web example

The Spring Boot starts an embedded Tomcat server, listening on port 8080.

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих