diff --git a/pom.xml b/pom.xml index d799a93..d9fa758 100644 --- a/pom.xml +++ b/pom.xml @@ -52,6 +52,11 @@ spring-webmvc ${spring.version} + + org.springframework + spring-context-support + ${spring.version} + @@ -71,6 +76,11 @@ lombok 1.16.16 + + org.freemarker + freemarker + 2.3.23 + diff --git a/src/main/java/ru/dmitriymx/skeleton/springmvc/SpringConfigMVC.java b/src/main/java/ru/dmitriymx/skeleton/springmvc/SpringConfigMVC.java new file mode 100644 index 0000000..1f20de9 --- /dev/null +++ b/src/main/java/ru/dmitriymx/skeleton/springmvc/SpringConfigMVC.java @@ -0,0 +1,42 @@ +package ru.dmitriymx.skeleton.springmvc; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.ViewResolver; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; +import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver; + +/** + * Данный класс является файлом настройки контекста для Spring + */ +@Configuration +@EnableWebMvc +public class SpringConfigMVC extends WebMvcConfigurerAdapter { + /** + * Компонент, отвечающий за отображение шаблонов + * + * @return {@link ViewResolver} + */ + @Bean + public ViewResolver viewResolver() { + FreeMarkerViewResolver viewResolver = new FreeMarkerViewResolver(); + viewResolver.setContentType("text/html;charset=UTF-8"); + viewResolver.setCache(true); + viewResolver.setSuffix(".ftl"); + return viewResolver; + } + + /** + * Настройки для Freemarker + * + * @return {@link FreeMarkerConfigurer} + */ + @Bean + public FreeMarkerConfigurer freemarkerConfig() { + FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer(); + freeMarkerConfigurer.setTemplateLoaderPath("classpath:/templates/"); + return freeMarkerConfigurer; + } +} diff --git a/src/main/java/ru/dmitriymx/skeleton/springmvc/WebApp.java b/src/main/java/ru/dmitriymx/skeleton/springmvc/WebApp.java index 836e05e..80efcf6 100644 --- a/src/main/java/ru/dmitriymx/skeleton/springmvc/WebApp.java +++ b/src/main/java/ru/dmitriymx/skeleton/springmvc/WebApp.java @@ -7,13 +7,10 @@ import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.log.Slf4jLog; -import org.springframework.context.annotation.Configuration; import org.springframework.web.context.ContextLoaderListener; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.servlet.DispatcherServlet; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import java.net.InetSocketAddress; @@ -23,15 +20,6 @@ public class WebApp { private final String host; private final int port; - /** - * Данный класс является файлом настройки контекста для Spring - * однако, т.к. мы никакие бины не объявляем, то красс пустует - */ - @Configuration - @EnableWebMvc - public static class SpringConfigMVC extends WebMvcConfigurerAdapter { - } - /** * Создаем Spring-контекст * diff --git a/src/main/java/ru/dmitriymx/skeleton/springmvc/WebAppController.java b/src/main/java/ru/dmitriymx/skeleton/springmvc/WebAppController.java index 45b493a..1390e4c 100644 --- a/src/main/java/ru/dmitriymx/skeleton/springmvc/WebAppController.java +++ b/src/main/java/ru/dmitriymx/skeleton/springmvc/WebAppController.java @@ -1,8 +1,8 @@ package ru.dmitriymx.skeleton.springmvc; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.ResponseBody; /** * Здесь описываются все пути, что начинаются с '/' @@ -14,11 +14,11 @@ public class WebAppController { /** * Обработка корневого запроса '/' * - * @return Сырое строковое значение + * @return Название шаблона */ @RequestMapping - @ResponseBody - public String index() { - return "Hello world!"; + public String index(Model model) { + model.addAttribute("message", "Hello world!"); + return "index"; } } diff --git a/src/main/resources/templates/index.ftl b/src/main/resources/templates/index.ftl new file mode 100644 index 0000000..79bc730 --- /dev/null +++ b/src/main/resources/templates/index.ftl @@ -0,0 +1,12 @@ +[#ftl] + + + + + Skeleton - SpringMVC + + +

Freemarker template engine

+

${message}

+ +