1. 概述
Apache Tiles 是一个完全基于组合设计模式的免费开源模板框架。
组合设计模式是一种结构性模式,它将对象组织成树形结构,以表示整体与部分的层次关系。在Tiles中,页面是通过组装称为“瓷砖”的子视图来构建的。
与其他框架相比,该框架的优势包括:
- 可重用性
- 配置简易
- 性能开销低
本文将专注于将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布局文件
现在我们需要定义模板定义,并针对每个页面重写特定页面的模板定义:
<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应用程序中配置Tiles的关键有两个类:TilesConfigurer
和TilesViewResolver
:
TilesConfigurer
通过提供Tiles配置文件的路径,帮助将Tiles框架与Spring框架连接起来。TilesViewResolver
是Spring API提供的适配器类之一,用于解析Tiles视图。
最后,在ApplicationConfiguration
类中,我们使用了TilesConfigurer
和TilesViewResolver
类实现了集成:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.baeldung.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. Tiles模板文件
至此,我们已经完成了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项目中找到完整实现。