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类:ApplicationInitializerApplicationControllerApplicationConfiguration

  • 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的关键有两个类:TilesConfigurerTilesViewResolver

  • TilesConfigurer 通过提供Tiles配置文件的路径,帮助将Tiles框架与Spring框架连接起来。
  • TilesViewResolver 是Spring API提供的适配器类之一,用于解析Tiles视图。

最后,在ApplicationConfiguration类中,我们使用了TilesConfigurerTilesViewResolver类实现了集成:

@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项目中找到完整实现。


» 下一篇: Java MD5哈希