SpringBoot學習筆記五:整合Thymeleaf模板

thymeleaf介紹

Thymeleaf是現代化服務器端的Java模板引擎,不同與其它幾種模板的是Thymeleaf的語法更加接近HTML送淆,并且具有很高的擴展性税产。詳細資料可以瀏覽官網

Thymeleaf官網

Thymeleaf特點

  • 支持無網絡環(huán)境下運行偷崩,由于它支持 html 原型辟拷,然后在 html 標簽里增加額外的屬性來達到模板+數據的展示方式。瀏覽器解釋 html 時會忽略未定義的標簽屬性阐斜,所以 thymeleaf 的模板可以靜態(tài)地運行梧兼;當有數據返回到頁面時,Thymeleaf 標簽會動態(tài)地替換掉靜態(tài)內容智听,使頁面動態(tài)顯示羽杰。所以它可以讓前端小姐姐在瀏覽器中查看頁面的靜態(tài)效果,又可以讓程序員小哥哥在服務端查看帶數據的動態(tài)頁面效果到推。
  • 開箱即用考赛,為Spring提供方言,可直接套用模板實現JSTL莉测、 OGNL表達式效果颜骤,避免每天因套用模板而修改JSTL、 OGNL標簽的困擾捣卤。同時開發(fā)人員可以擴展自定義的方言忍抽。
  • SpringBoot官方推薦模板,提供了可選集成模塊(spring-boot-starter-thymeleaf)董朝,可以快速的實現表單綁定鸠项、屬性編輯器、國際化等功能子姜。

Spring Boot整合Thymeleaf

題外話:在Spring Boot出現之前整合Thymeleaf你可能需要配置如下的Bean(采用Java Config

@Bean
// 配置模板解析器
// Thymeleaf3使用ITemplateResolver接口祟绊,SpringResourceTemplateResolver實現類
// Thymeleaf3之前使用TemplateResolver接口,ServletContextTemplateResolver實現類
public ITemplateResolver templateResolver() {
    SpringResourceTemplateResolver templateResolver =
            new SpringResourceTemplateResolver();
    templateResolver.setPrefix("/WEB-INF/templates/");
    templateResolver.setSuffix(".html");
    // 設置templateMode屬性為HTML5
    templateResolver.setTemplateMode("HTML5");
    // 設置編碼格式為UTF-8
    templateResolver.setCharacterEncoding("UTF-8");
    // templateResolver.setOrder(1);
    // templateResolver.setCacheable(true);
    return templateResolver;
}
@Bean
public TemplateEngine templateEngine(ITemplateResolver templateResolver) {
    SpringTemplateEngine templateEngine = new SpringTemplateEngine();
    // 注入模板解析器
    templateEngine.setTemplateResolver(templateResolver);
    return templateEngine;
}
@Bean
@Primary
public ViewResolver viewResolver(TemplateEngine templateEngine) {
    ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
    viewResolver.setTemplateEngine(templateEngine);
    return viewResolver;
}

得益于Spring Boot的自動配置功能ThymeleafAutoConfiguration哥捕,Spring Boot整合Thymeleaf很便捷

添加依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

配置

application.yml

spring:
  thymeleaf:
    cache: false
    encoding: UTF-8
    mode: HTML5
    prefix: classpath:/templates/
    suffix: .html
    servlet:
      content-type: text/html

這里需要注意的是Spring Boot默認情況下會緩存模板spring.thymeleaf.cache=true牧抽,一般在開發(fā)時需要將此項設置為false,在部署時再將此值設置為true遥赚,以提高性能扬舒,但Spring Boot也提供了devtools開發(fā)者工具,默認情況下devtools會禁用緩存選項凫佛,因此使用devtools進行熱部署便不用更改spring.thymeleaf.cache的默認配置了讲坎,也不要在全局配置文件配置為true
關于devtools的使用可參考我的文章 SpringBoot學習筆記三:devtools與熱部署

這里貼出Spring Boot關于Thymeleaf的所有配置項(引自官方文檔

# THYMELEAF
spring.thymeleaf.cache=true # Whether to enable template caching.
spring.thymeleaf.check-template=true # Whether to check that the template exists before rendering it.
spring.thymeleaf.check-template-location=true # Whether to check that the templates location exists.
spring.thymeleaf.enabled=true # Whether to enable Thymeleaf view resolution for Web frameworks.
spring.thymeleaf.enable-spring-el-compiler=false # Enable the SpringEL compiler in SpringEL expressions.
spring.thymeleaf.encoding=UTF-8 # Template files encoding.
spring.thymeleaf.excluded-view-names= # Comma-separated list of view names (patterns allowed) that should be excluded from resolution.
spring.thymeleaf.mode=HTML # Template mode to be applied to templates. See also Thymeleaf's TemplateMode enum.
spring.thymeleaf.prefix=classpath:/templates/ # Prefix that gets prepended to view names when building a URL.
spring.thymeleaf.reactive.chunked-mode-view-names= # Comma-separated list of view names (patterns allowed) that should be the only ones executed in CHUNKED mode when a max chunk size is set.
spring.thymeleaf.reactive.full-mode-view-names= # Comma-separated list of view names (patterns allowed) that should be executed in FULL mode even if a max chunk size is set.
spring.thymeleaf.reactive.max-chunk-size=0 # Maximum size of data buffers used for writing to the response, in bytes.
spring.thymeleaf.reactive.media-types= # Media types supported by the view technology.
spring.thymeleaf.servlet.content-type=text/html # Content-Type value written to HTTP responses.
spring.thymeleaf.suffix=.html # Suffix that gets appended to view names when building a URL.
spring.thymeleaf.template-resolver-order= # Order of the template resolver in the chain.
spring.thymeleaf.view-names= # Comma-separated list of view names (patterns allowed) that can be resolved.

Thymeleaf實踐

PageController

package com.example.springbootthymeleaf.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class PageController {

    @GetMapping("/regist")
    public String toRegistPage(Model model) {
        model.addAttribute("title", "用戶注冊");
        model.addAttribute("msg", "歡迎注冊");
        return "regist";
    }

}

src/main/resources/templates/regist.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title th:text="${title}">用戶注冊</title>
    <link rel="stylesheet" >
    <script src="http://cdn.static.runoob.com/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <form class="col-md-4 col-md-offset-4" th:action="@{/regist}"
                 method="post">
            <fieldset>
                <legend th:text="${msg}">歡迎注冊</legend>
                <div class="input-group form-group">
                    <span class="input-group-addon glyphicon glyphicon-user"></span>
                    <input id="username" name="username" class="form-control"
                              placeholder="請輸入用戶名"/>
                </div>
                <div class="input-group form-group">
                    <span class="input-group-addon glyphicon glyphicon-lock"></span>
                    <input type="password" id="password" name="password" class="form-control"
                                 placeholder="請輸入密碼"/>
                </div>
                <div class="input-group form-group">
                    <span class="input-group-addon glyphicon glyphicon-envelope"></span>
                    <input id="email" name="email" class="form-control"
                              placeholder="請輸入郵箱賬號"/>
                </div>
                <div class="form-group">
                    <div class="col-md-6 col-md-offset-3">
                        <button type="reset" class="btn btn-default btn-primary">重置</button>
                        <button type="submit" class="btn btn-default btn-primary">注冊</button>
                    </div>
                </div>
            </fieldset>
        </form>
    </div>
</div>
</body>
</html>

靜態(tài)效果

在系統(tǒng)資源管理器找到regist.html雙擊即可打開


靜態(tài)效果

動態(tài)效果

啟動工程訪問http://localhost:8080/regist

動態(tài)效果

Thymeleaf語法可參考

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末泽腮,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子衣赶,更是在濱河造成了極大的恐慌诊赊,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件府瞄,死亡現場離奇詭異碧磅,居然都是意外死亡,警方通過查閱死者的電腦和手機遵馆,發(fā)現死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門鲸郊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人货邓,你說我怎么就攤上這事秆撮。” “怎么了换况?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵职辨,是天一觀的道長。 經常有香客問我戈二,道長舒裤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任觉吭,我火速辦了婚禮腾供,結果婚禮上,老公的妹妹穿的比我還像新娘鲜滩。我一直安慰自己伴鳖,他們只是感情好,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布徙硅。 她就那樣靜靜地躺著榜聂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪闷游。 梳的紋絲不亂的頭發(fā)上峻汉,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天,我揣著相機與錄音脐往,去河邊找鬼。 笑死扳埂,一個胖子當著我的面吹牛业簿,可吹牛的內容都是我干的。 我是一名探鬼主播阳懂,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼梅尤,長吁一口氣:“原來是場噩夢啊……” “哼柜思!你這毒婦竟也來了?” 一聲冷哼從身側響起巷燥,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后锌订,有當地人在樹林里發(fā)現了一具尸體推盛,經...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年钝腺,在試婚紗的時候發(fā)現自己被綠了抛姑。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡艳狐,死狀恐怖定硝,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情毫目,我是刑警寧澤蔬啡,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站镀虐,受9級特大地震影響星爪,放射性物質發(fā)生泄漏。R本人自食惡果不足惜粉私,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一顽腾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诺核,春花似錦抄肖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至入客,卻和暖如春管毙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背桌硫。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工夭咬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人铆隘。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓卓舵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親膀钠。 傳聞我的和親對象是個殘疾皇子掏湾,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內容