FreeMarker 跟 Thymeleaf 同樣,是一種模板引擎,他能夠無縫兼容 FreeMarker 在 Spring Boot 開發者中仍然有着很高的地位。html
本章重點內容java
本項目源碼下載git
相對於 Jsp ,FreeMarker 具備太多的優點。FreeMarker 適合 Mvc 場景。github
FreeMarker 最大的特色就是具備可編程能力,能夠對任何後臺輸出的數據作編程能力,這就像在 Java 中加入了 PHP 功能,這很是有趣。web
FreeMarker 支持各種語法包括 字符輸出、條件判斷 if/else、循環遍歷、spring
${...}
<#if condition> ... <#elseif condition2> ... <#elseif condition3> ... <#else> ... </#if>
假設 users 包含['Joe', 'Kate', 'Fred'] 序列: <#list users as user> <p>${user} </#list> 輸出: <p>Joe <p>Kate <p>Fred
將版權信息單獨存放在頁面文件 copyright_footer.html 中: <hr> <i> Copyright (c) 2000 <a href="http://www.baidu.com">Baidu Inc</a>, <br> All Rights Reserved. </i> 當須要用到這個文件時,可使用 include 指令來插入: <html> <head> <title>Test page</title> </head> <body> <h1>Test page</h1> <p>Blah blah... <#include "/copyright_footer.html"> </body> </html>
本示例文件結構,新增了連個用於示例文件的文件 IndexController.java 與 index.ftlapache
+ java/fishpro/freemarker/controller -- IndexController.java + resources/templates --index.ftl
Spring Initializr
而後點擊 【Next】下一步GroupId
(包名)、Artifact
(項目名) 便可。點擊 下一步 groupId=com.fishproSpring Web Starter
前面打鉤,在模板列中勾選 apache freemarker
。spring-boot-study-freemarker
.注意若是在新建下面的時候沒有引入 FreeMarker 那麼就在這裏複製粘貼上去。編程
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.fishpro</groupId> <artifactId>freemarker</artifactId> <version>0.0.1-SNAPSHOT</version> <name>freemarker</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
注意 Spring Boot 中默認不須要作任何配置,示例程序把默認的端口 8080 改成了 8086,並把 application.properties 改成了 application.yml瀏覽器
server: port: 8086
本示例文件結構,新增了連個用於示例文件的文件 IndexController.java 與 index.ftl IndexController.javaapp
/** * 在是一個普通的 Controller 類 * */ @Controller public class IndexController { /** * 路由 /index * 返回 index 這裏默認配置自動映射到 templages/index * */ @RequestMapping("/index") public String index(Model model){ model.addAttribute("welcome","hello fishpro"); return "index"; } }
index.ftl
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> this is welcome ${welcome} </body> </html>
在瀏覽器中輸入 http://localhost:8086/index 顯示爲,hello fishpro 就是後臺輸出的 model 對象
this is welcome hello fishpro
FreeMarker 比傳統的 JSP 多出一個模板的做用,就是說,咱們能夠作多個不一樣樣式的模板,動態的切換。這就是 FreeMarker 應用場景。