SpringBoot整合Thymeleaf與FreeMarker視圖層技術
整合Thymeleaf
Thymeleaf是新一代Java模板引擎,類似於Velocity、FreeMarker等傳統Java模板引擎。與傳統Java模板引擎不同的是,Thymeleaf支持HTML原型,既可以讓前端工程師在瀏覽器中直接打開查看樣式,也可以讓後端工程師結合真實數據查看顯示效果。同事,Spring Boot提供瞭Thymeleaf自動化配置解決方案,因此在Spring Boot中使用Thymeleaf 非常方便。Spring Boot整合Thymeleaf 主要可通過如下步驟
1. 創建工程添加依賴
新建一個Spring Boot工程,然後添加spring-boot-starter-web 和spring-boot-starter-thymeleaf 依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 整合Thymeleaf --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
2. 配置Thymeleaf
Spring Boot為Thymeleaf提供瞭自動化配置類ThymeleafAutoConfiguration,相關的配置屬性在ThymeleafProperties 類中,ThymeleafProperties類部分源碼如下:
@ConfigurationProperties(prefix = "spring.thymeleaf") public class ThymeleafProperties { private static final Charset DEFAULT_ENCODING = StandardCharsets.UTF_8; public static final String DEFAULT_PREFIX = "classpath:/templates/"; public static final String DEFAULT_SUFFIX = ".html"; }
由此配置可以看到,默認的模板位置在classpath:/templates/,默認的模板後綴名為.html。如果使用IDEA創建Spring Boot 項目,templates文件夾默認會創建。如需對默認的Thymeleaf 配置參數進行自定義配置,可以在application.properties 中進行配置,部分常見配置如下:
#是否開啟緩存,開發時可設置為false,默認為true
spring.thymeleaf.cache=false
#檢查模版是否存在,默認為true
spring.thymeleaf.check-template=true
#檢查模版位置是否存在,默認為true
spring.thymeleaf.check-template-location=true
#模版文件編碼
spring.thymeleaf.encoding=UTF-8
#模版文件位置
spring.thymeleaf.prefix=classpath:/templates/
#Content-Type配置
spring.thymeleaf.servlet.content-type=text/html
#模版文件後綴
spring.thymeleaf.suffix=.html
3. 配置控制器
創建Book實體類,然後在Controller中返回ModelAndView,如下:
public class Book { private int id; private String name; private String author; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } }
@RestController public class BookController { @GetMapping(value = "/books") public ModelAndView books(){ List<Book> books = new ArrayList<>(); Book b1 = new Book(); b1.setId(1); b1.setAuthor("唐傢三少"); b1.setName("鬥羅大陸Ⅰ"); Book b2 = new Book(); b2.setId(2); b2.setAuthor("唐傢三少"); b2.setName("鬥羅大陸Ⅱ"); books.add(b1); books.add(b2); ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("books",books); modelAndView.setViewName("books"); return modelAndView; } }
4. 創建視圖
在resources目錄下的templates目錄中創建books.html,如下:
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>圖書列表</title> </head> <body> <table border="1"> <tr> <td>圖書編號</td> <td>圖書名稱</td> <td>圖書作者</td> </tr> <tr th:each="book:${books}"> <td th:text="${book.id}"></td> <td th:text="${book.name}"></td> <td th:text="${book.author}"></td> </tr> </table> </body> </html>
代碼解釋:
- 首先在第二行導入Thymeleaf 的名稱空間
- 通過遍歷將books中的數據展示出來,Thymeleaf中通過th:each進行集合遍歷,通過th:text展示數據
5. 運行
瀏覽器輸入"http://localhost:8081/books",查看運行結果,如圖:
整合FreeMarker
FreeMarker 是一個非常古老的模板引擎,可以用在Web環境或者非Web環境中。FreeMarker 需要經過解析才能在瀏覽器中展示出來。FreeMarker 不僅可以用來配置HTML頁面模板,也可以作為電子郵件模板、配置文件模板以及源碼模板。整合步驟如下:
1. 創建項目添加依賴
創建Spring Boot項目,然後添加spring-boot-starter-web和spring-boot-starter-freemarker依賴,如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 整合FreeMarker --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
2. 配置FreeMarker
Spring Boot對FreeMarker 也提供瞭自動化配置類FreeMarkerAutoConfiguration,相關的配置屬性在FreeMarkerProperties中,FreeMarkerProperties的部分源碼如下:
@ConfigurationProperties(prefix = "spring.freemarker") public class FreeMarkerProperties extends AbstractTemplateViewResolverProperties { public static final String DEFAULT_TEMPLATE_LOADER_PATH = "classpath:/templates/"; public static final String DEFAULT_PREFIX = ""; public static final String DEFAULT_SUFFIX = ".ftl"; ... }
FreeMarker 默認模板位置和Thymeleaf 一樣,都在classpath:/templates/中,默認文件後綴是.ftl,開發者可以在application.properties 中對這些默認配置進行修改,如下:
3. 控制器
控制器和Thymeleaf 中的控制器一樣,這裡不再重復
4. 創建視圖
在resources目錄下的templates目錄中創建books.ftl 文件,如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>圖書列表FreeMarker</title> </head> <body> <table border="1"> <tr> <td>圖書編號</td> <td>圖書名稱</td> <td>圖書作者</td> </tr> <#if books ?? && (books?size>0)> <#list books as book> <tr> <td>${book.id}</td> <td>${book.name}</td> <td>${book.author}</td> </tr> </#list> </#if> </table> </body> </html>
代碼解釋:
先判斷model中的books部位可控並且books中有數據,然後再進行遍歷
5. 運行
瀏覽器輸入"http://localhost:8081/books",查看運行結果,如圖:
到此這篇關於SpringBoot整合Thymeleaf與FreeMarker視圖層技術的文章就介紹到這瞭,更多相關SpringBoot整合視圖層內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Spring Boot 整合 Thymeleaf 實例分享
- SpringBoot如何返回頁面的實現方法
- springboot配置templates直接訪問的實現
- springboot訪問template下的html頁面的實現配置
- Spring Boot和Thymeleaf整合結合JPA實現分頁效果(實例代碼)