知識庫 / Spring / Spring MVC RSS 訂閱

Spring MVC 與 Apache Tiles 集成

Spring MVC
HongKong
4
02:45 PM · Dec 06 ,2025

1. 概述

Apache Tiles 是一個免費、開源的模板引擎,完全基於 Composite 設計模式構建。

Composite 設計模式是一種結構型模式,它將對象組合成樹狀結構,以表示整體-部分層次關係,並且該模式對單個對象和對象組合一視同仁。換句話説,在 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-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 文件同步,並根據傳入的請求重定向到必要的頁面。

Let us see each of the classes in action:

@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 框架與 Spring 框架關聯,提供 Tiles 配置文件路徑。
  • 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 的定義。

在此步驟中,我們需要創建與在 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 的集成。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.