Перейти к основному содержимому

Интеграция плиток Apache с Spring MVC

· 3 мин. чтения

Задача: Сумма двух

Дано массив целых чисел и целая сумма. Нужно найти индексы двух чисел, сумма которых равна заданной ...

ANDROMEDA

1. Обзор

Apache Tiles — это бесплатная платформа шаблонов с открытым исходным кодом, полностью построенная на шаблоне проектирования Composite.

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

Преимущества этого фреймворка перед другими фреймворками:

  • возможность повторного использования
  • простота в настройке
  • низкая производительность

В этой статье мы сосредоточимся на интеграции Apache Tiles со Spring MVC .

2. Конфигурация зависимостей

Первым шагом здесь является добавление необходимой зависимости в pom.xml :

<dependency>
<groupId>org.apache.tiles</groupId>
<artifactId>tiles-jsp</artifactId>
<version>3.0.8</version>
</dependency>

3. Файлы макета плитки

Теперь нам нужно определить определения шаблонов, и, в частности, для каждой страницы мы перезапишем определения шаблонов для этой конкретной страницы:

<tiles-definitions>
<definition name="template-def"
template="/WEB-INF/views/tiles/layouts/defaultLayout.jsp">
<put-attribute name="title" value="" />
<put-attribute name="header"
value="/WEB-INF/views/tiles/templates/defaultHeader.jsp" />
<put-attribute name="menu"
value="/WEB-INF/views/tiles/templates/defaultMenu.jsp" />
<put-attribute name="body" value="" />
<put-attribute name="footer"
value="/WEB-INF/views/tiles/templates/defaultFooter.jsp" />
</definition>
<definition name="home" extends="template-def">
<put-attribute name="title" value="Welcome" />
<put-attribute name="body"
value="/WEB-INF/views/pages/home.jsp" />
</definition>
</tiles-definitions>

4. ApplicationConfiguration и другие классы

В рамках настройки мы создадим три конкретных класса Java с именами ApplicationInitializer , ApplicationController и ApplicationConfiguration :

  • ApplicationInitializer инициализирует и проверяет необходимую конфигурацию, указанную в классах ApplicationConfiguration .
  • Класс ApplicationConfiguration содержит конфигурацию для интеграции Spring MVC с инфраструктурой Apache Tiles.
  • Класс ApplicationController работает синхронно с файломtiles.xml и перенаправляет на нужные страницы на основании входящих запросов

Давайте посмотрим каждый из классов в действии:

@Controller
@RequestMapping("/")
public class TilesController {
@RequestMapping(
value = { "/"},
method = RequestMethod.GET)
public String homePage(ModelMap model) {
return "home";
}
@RequestMapping(
value = { "/apachetiles"},
method = RequestMethod.GET)
public String productsPage(ModelMap model) {
return "apachetiles";
}

@RequestMapping(
value = { "/springmvc"},
method = RequestMethod.GET)
public String contactUsPage(ModelMap model) {
return "springmvc";
}
}
public class WebInitializer implements WebApplicationInitializer {
public void onStartup(ServletContext container) throws ServletException {

AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();

ctx.register(TilesApplicationConfiguration.class);

container.addListener(new ContextLoaderListener(ctx));

ServletRegistration.Dynamic servlet = container.addServlet(
"dispatcher", new DispatcherServlet(ctx));
servlet.setLoadOnStartup(1);
servlet.addMapping("/");
}
}

Есть два важных класса, которые играют ключевую роль в настройке плиток в приложении Spring MVC. Это TilesConfigurer и TilesViewResolver :

  • TilesConfigurer помогает связать фреймворк Tiles с фреймворком Spring, предоставляя путь к файлу конфигурации тайлов.
  • TilesViewResolver — это один из классов адаптера, предоставляемых Spring API для разрешения представления плиток.

Наконец, в классе ApplicationConfiguration мы использовали классы TilesConfigurer и TilesViewResolver для достижения интеграции:

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.foreach.spring.controller.tiles")
public class TilesApplicationConfiguration implements WebMvcConfigurer {
@Bean
public TilesConfigurer tilesConfigurer() {
TilesConfigurer tilesConfigurer = new TilesConfigurer();
tilesConfigurer.setDefinitions(
new String[] { "/WEB-INF/views/**/tiles.xml" });
tilesConfigurer.setCheckRefresh(true);

return tilesConfigurer;
}

@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
TilesViewResolver viewResolver = new TilesViewResolver();
registry.viewResolver(viewResolver);
}

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**")
.addResourceLocations("/static/");
}
}

5. Файлы шаблонов плитки

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

На этом шаге нам нужно создать определенные файлы шаблонов, которые были определены в файлеtiles.xml .

Пожалуйста, найдите фрагменты макетов, которые можно использовать в качестве основы для создания конкретных страниц:

<html>
<head>
<meta
http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title><tiles:getAsString name="title" /></title>
<link href="<c:url value='/static/css/app.css' />"
rel="stylesheet">
</link>
</head>
<body>
<div class="flex-container">
<tiles:insertAttribute name="header" />
<tiles:insertAttribute name="menu" />
<article class="article">
<tiles:insertAttribute name="body" />
</article>
<tiles:insertAttribute name="footer" />
</div>
</body>
</html>

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

На этом интеграция Spring MVC с Apache Tiles завершена.

Вы можете найти полную реализацию в следующем проекте github .