Spring Boot 揭祕與實戰(七) 實用技術篇 – FreeMarker 模板引擎

樑桂釗發表於2019-02-21

Spring Boot 提供了很多模板引擎的支援,例如 FreeMarker、Thymeleaf。這篇,我們看下 Spring Boot 如何整合和使用 FreeMarker。

部落格地址:blog.720ui.com/

Spring Boot 中使用 FreeMarker 模板非常簡單方便。如果想要使用FreeMarker 模板引擎,首先,修改 POM 檔案,新增依賴。

FreeMaker 代替 JSP 作為頁面渲染

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>複製程式碼

然後,我們建立模板。值得注意的是,Spring Boot 整合的 FreeMarker 預設的配置檔案放在 classpath:/templates/。因此,我們需要在 src/main/resources/templates/ 新增模板檔案。

例如,我們新增一個模板檔案,叫做 welcome.ftl。

<!DOCTYPE html>
<html lang="en">
<body>
    Date: ${time?date}<br>
    Message: ${message}
</body>
</html>複製程式碼

那麼,最後一步,我們在控制類中只需要這麼配置就可以了。

@Controller("template.freemarkerController")
public class WelcomeController {
    @RequestMapping("/template/freemarker/welcome")
    public String welcome(Map<String, Object> model) {
        model.put("time", new Date());
        model.put("message", "樑桂釗");
        return "welcome";
    }
}複製程式碼

還記得我們之前的 WebMain 麼,我們來回顧下。

@RestController
@EnableAutoConfiguration
@ComponentScan(basePackages = { "com.lianggzone.springboot" })
public class WebMain {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(WebMain.class, args);
    }
}複製程式碼

直接執行 WebMain 類,或者可以通過“mvn spring-boot:run”在命令列啟動該應用。會啟動一個內嵌的 Tomcat 伺服器執行在 8080 埠。訪問 “http://localhost:8080/template/freemarker/welcome” 可以看到頁面上顯示結果。

生成靜態檔案

上面的場景,是非常典型的 MVC 的使用場景,我們通過 FreeMaker 代替 JSP 作為頁面渲染。但是,隨著,前後端分離,JSP 漸漸遠離我們的視野,服務端更多地處理業務邏輯,通過 RESTful 或者 RPC 對外提供服務。頁面的互動,交給前端做渲染。

這種情況下,是不是 FreeMarker 就沒有用武之地了呢?實際上,FreeMarker 作為模板引擎,還有很多使用場景,例如,我們可以把我們可以動靜分離,把相對不會變化的內容通過 FreeMarker 渲染生成靜態檔案上傳到內容服務,內容服務通過 CDN 進行資源分發。

那麼,我們對上面的程式碼進行一個小改造,模擬一個檔案生成到本地的場景。

@RestController("template.freemarkerController2")
@EnableAutoConfiguration
public class Welcome2Controller {
    @Autowired  
    private Configuration configuration; 
    @RequestMapping("/template/freemarker/welcome2")
    public String welcome2(Map<String, Object> model) throws Exception {
        model.put("time", new Date());
        model.put("message", "樑桂釗");

        Template template = configuration.getTemplate("welcome.ftl"); 
        String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, model);  

        FileUtils.writeStringToFile(new File("d:/welcome.html"), content);

        return "welcome";
    }
}複製程式碼

直接執行 WebMain 類,訪問 “http://localhost:8080/template/freemarker/welcome2” 可以看到頁面上顯示結果,並檢視D盤,是否生成檔案了呢?

原始碼

相關示例完整程式碼: springboot-action

(完)

更多精彩文章,盡在「服務端思維」微信公眾號!

Spring Boot 揭祕與實戰(七) 實用技術篇 – FreeMarker 模板引擎

相關文章