Введение в использование FreeMarker в Spring MVC

Введение в использование FreeMarker в Spring MVC

1. обзор

FreeMarker - это шаблонизатор на основе Java от Apache Software Foundation. Как и другие движки шаблонов, FreeMarker предназначен для поддержки веб-страниц HTML в приложениях, следующих шаблону MVC. В этом руководстве показано, как использоватьconfigure FreeMarker for use in Spring MVC в качестве альтернативы JSP.

В статье не будут обсуждаться основы использования Spring MVC. Более подробно об этом можно прочитать вthis article. Кроме того, это не предназначено для подробного рассмотрения обширных возможностей FreeMarker. Для получения дополнительной информации об использовании и синтаксисе FreeMarker посетитеits website.

2. Maven Зависимости

Поскольку это проект на основе Maven, мы сначала добавляем необходимые зависимости вpom.xml:


    org.freemarker
    freemarker
    2.3.23


    org.springframework
    spring-context-support
    ${spring.version}

3. Конфигурации

Теперь перейдем к настройке проекта. Это проект Spring на основе аннотаций, поэтому мы не будем демонстрировать конфигурацию на основе XML.

3.1. Веб-конфигурация Spring

Давайте создадим класс для настройки веб-компонентов. Для этого нам нужно аннотировать класс с помощью@EnableWebMvc,@Configuration и@ComponentScan.

@EnableWebMvc
@Configuration
@ComponentScan({"com.example.freemarker"})
public class SpringWebConfig extends WebMvcConfigurerAdapter {
    // All web configuration will go here.
}

3.2. НастроитьViewResolver

Spring MVC Framework предоставляет интерфейсViewResolver, который сопоставляет имена представлений с фактическими представлениями. Мы создадим экземплярFreeMarkerViewResolver, который принадлежит зависимостиspring-webmvc.

Этот объект должен быть настроен с необходимыми значениями, которые будут использоваться во время выполнения. Например, мы настроим преобразователь представлений для использования FreeMarker для представлений, заканчивающихся на.ftl:

@Bean
public FreeMarkerViewResolver freemarkerViewResolver() {
    FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
    resolver.setCache(true);
    resolver.setPrefix("");
    resolver.setSuffix(".ftl");
    return resolver;
}

Кроме того, обратите внимание, как мы можем также контролировать режим кэширования здесь - это должно быть отключено только для отладки и разработки.

3.3. Конфигурация пути к шаблону FreeMarker

Далее мы установим путь к шаблону, который указывает, где шаблоны расположены в веб-контексте:

@Bean
public FreeMarkerConfigurer freemarkerConfig() {
    FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer();
    freeMarkerConfigurer.setTemplateLoaderPath("/WEB-INF/views/ftl/");
    return freeMarkerConfigurer;
}

3.4. Конфигурация Spring Controller

Теперь мы можем использовать Spring Controller дляprocess a FreeMarker template for display. Это просто обычный Spring Controller:

@RequestMapping(value = "/cars", method = RequestMethod.GET)
public String init(@ModelAttribute("model") ModelMap model) {
    model.addAttribute("carList", carList);
    return "index";
}

КонфигурацииFreeMarkerViewResolver и пути, определенные ранее, позаботятся о переводе имени представленияindex в правильное представление FreeMarker.

4. HTML-шаблон FreeMarker

4.1. Создание простого представления HTML-шаблона

Пришло время создатьHTML template with FreeMarker. В нашем примере мы добавили список автомобилей в модель. FreeMarker может получить доступ к этому списку и отобразить его, просматривая его содержимое.

Когда делается запрос для URI/cars, Spring обрабатывает шаблон, используя предоставленную модель. В нашем шаблоне#list directive указывает, что FreeMarker должен перебирать объектcarList из модели, используяcar для ссылки на текущий элемент, и отображать содержимое внутри этого блока.

Следующий код также включаетFreeMarkerexpressions для ссылки на атрибуты каждого элемента вcarList; или, например, для отображения свойстваmake текущего элемента автомобиля мы используем выражение$\{car.make}.


Add Car
Make :
Model:

<#list model["carList"] as car>
Make Model
${car.make} ${car.model}

После стилизации вывода с помощью CSS обработанный шаблон FreeMarker создает форму и список автомобилей:

browser_localhost-300x235

5. Заключение

В этой статье мы обсудили, как интегрировать возможностиFreeMarker in a Spring MVC application. FreeMarker, выходящие далеко за рамки того, что мы продемонстрировали, поэтому, пожалуйста, посетитеApache FreeMarker website для получения более подробной информации о его использовании.

Пример кода в этой статье доступен в проектеGithub.