知識庫 / Spring / Spring MVC RSS 訂閱

使用 FreeMarker 在 Spring MVC 中的介紹

Spring MVC
HongKong
6
02:52 PM · Dec 06 ,2025

1. 概述

FreeMarker 是 Apache 軟件基金會基於 Java 的模板引擎。 類似於其他模板引擎,FreeMarker 旨在支持 MVC 模式應用程序中的 HTML Web 頁面。 本教程演示瞭如何 配置 FreeMarker 用於在 Spring MVC 中使用 作為 JSP 的替代方案。

本文檔將不討論 Spring MVC 的基本用法。 如果您想深入瞭解,請參閲該文章。 此外,本文檔不旨在提供 FreeMarker 的廣泛功能方面的詳細説明。 要了解有關 FreeMarker 的用法和語法,請訪問 其網站

2. Maven 依賴

由於這是一個基於 Maven 的項目,我們首先需要在 pom.xml 中添加所需的依賴:

<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.23</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>${spring.version}</version>
</dependency>

3. 配置

現在我們來深入瞭解項目的配置。這是一個基於註解的 Spring 項目,因此我們將不演示基於 XML 的配置。

3.1. Spring Web 配置

讓我們創建一個類來配置 Web 組件。為此,我們需要使用 @EnableWebMvc@Configuration@ComponentScan 註解來標記該類。

@EnableWebMvc
@Configuration
@ComponentScan({"com.baeldung.freemarker"})
public class SpringWebConfig extends WebMvcConfigurerAdapter {
    // All web configuration will go here.
}

3.2. 配置 ViewResolver

Spring MVC 框架提供 ViewResolver 接口,用於將視圖名稱映射到實際的視圖。我們將創建一個 FreeMarkerViewResolver 實例,該實例屬於 spring-webmvc 依賴項。

該對象需要使用運行時所需的值進行配置。例如,我們將配置 ViewResolver 以使用 FreeMarker 來處理以 .ftl 結尾的視圖:

@Bean 
public FreeMarkerViewResolver freemarkerViewResolver() { 
    FreeMarkerViewResolver resolver = new FreeMarkerViewResolver(); 
    resolver.setCache(true); 
    resolver.setPrefix(""); 
    resolver.setSuffix(".ftl"); 
    return resolver; 
}

此外,您還可以在這裏控制緩存模式。這僅應在調試和開發過程中禁用。

3.3. FreeMarker 模板路徑配置

接下來,我們將設置模板路徑,這指示模板在 Web 環境中的位置:

@Bean 
public FreeMarkerConfigurer freemarkerConfig() { 
    FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer(); 
    freeMarkerConfigurer.setTemplateLoaderPath("/WEB-INF/views/ftl/");
    return freeMarkerConfigurer; 
}

3.4. Spring 控制器配置

現在我們可以使用 Spring 控制器來 處理 FreeMarker 模板以供顯示。 這只是一個典型的 Spring 控制器:

@RequestMapping(value = "/cars", method = RequestMethod.GET)
public String init(@ModelAttribute("model") ModelMap model) {
    model.addAttribute("carList", carList);
    return "index";
}

FreeMarkerViewResolver 和之前定義的路徑配置將負責將視圖名稱 index 翻譯為正確的 FreeMarker 視圖。

4. FreeMarker HTML 模板

4.1. 創建簡單的 HTML 模板視圖

現在是時候創建一個使用 FreeMarker 的 HTML 模板。 在我們的示例中,我們向模型中添加了一輛汽車列表。 FreeMarker 可以訪問該列表並遍歷其內容以顯示它。

當對 /cars URI 的請求被髮起時,Spring 將使用提供的模型來處理模板。 在我們的模板中,#list 指令 表示 FreeMarker 應該遍歷 carList 對象中的內容,並使用 car 來引用當前元素,並在該塊中渲染內容。

以下代碼還包含 FreeMarker 表達式,用於引用 carList 對象中的每個元素的屬性。 例如,要顯示當前汽車元素的 make 屬性,我們使用表達式 ${car.make}

<div id="header">
  <h2>FreeMarker Spring MVC Hello World</h2>
</div>
<div id="content">
  <fieldset>
    <legend>Add Car</legend>
    <form name="car" action="add" method="post">
      Make : <input type="text" name="make" /><br/>
      Model: <input type="text" name="model" /><br/>
      <input type="submit" value="Save" />
    </form>
  </fieldset>
  <br/>
  <table class="datatable">
    <tr>
      <th>Make</th>
      <th>Model</th>
    </tr>
    <#list model["carList"] as car>
      <tr>
        <td>${car.make}</td>
        <td>${car.model}</td>
      </tr>
    </#list>
  </table>
</div>

在為輸出樣式化 CSS 後,處理後的 FreeMarker 模板生成汽車表單和列表:

5. Spring Boot

如果我們在使用 Spring Boot 時,只需導入 spring-boot-starter-freemarker 依賴項即可:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
    <version>2.3.4.RELEASE</version>
</dependency>

然後,我們只需將模板文件添加到 src/main/resources/templates 目錄下。Spring Boot 負責其他默認配置,例如 FreeMarkerConfigurerFreeMarkerViewResolver

6. 結論

在本文中,我們討論瞭如何將 FreeMarker 集成到 Spring MVC 應用程序中。 FreeMarker 的功能遠超我們所展示的,請訪問 Apache FreeMarker 網站 以獲取更詳細的信息。

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

發佈 評論

Some HTML is okay.