您好,登錄后才能下訂單哦!
簡單介紹
目前在JavaEE領域有幾中比較常用的模板引擎,分別是Jsp、Velocity、Freemarker、Thymeleaf,對Freemark語法不是特別熟悉,不過對于前端頁面渲染效率來說,jsp其實還是最快的,Velocity次之。Thymeleaf雖然渲染效率不是很快,但是語法方面是比較輕巧的,Thymeleaf語法比Velocity輕巧,但是渲染效率不如Velocity
thymeleaf 支持html5標準;是一種模板引擎框架(TemplateEngine Framework);thymeleaf 頁面無須部署到servlet開發到服務器上,直接通過瀏覽器就能打開。它可以完全替代 JSP 。
特點:
1.Thymeleaf 在有網絡和無網絡的環境下皆可運行,即它可以讓美工在瀏覽器查看頁面的靜態效果,也可以讓程序員在服務器查看帶數據的動態頁面效果。這是由于它支持 html 原型,然后在 html 標簽里增加額外的屬性來達到模板+數據的展示方式。瀏覽器解釋 html 時會忽略未定義的標簽屬性,所以 thymeleaf 的模板可以靜態地運行;當有數據返回到頁面時,Thymeleaf 標簽會動態地替換掉靜態內容,使頁面動態顯示。
2.它提供標準和spring標準兩種方言,可以直接套用模板實現JSTL、 OGNL表達式效果。
3.Thymeleaf 提供spring標準方言和一個與 SpringMVC 完美集成的可選模塊,可以快速的實現表單綁定、屬性編輯器、國際化等功能。
maven配置
因為引入了SpringBoot的parent工程,所以不需要寫版本號
<!-- Themeleaf --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
application.yml配置
#添加Thymeleaf配置 thymeleaf: cache: false prefix: classpath:/templates/ suffix: .html mode: HTML5 encoding: UTF-8 content-type: text/html
application.yml:
server: port: 8081 #logging: # config: classpath:logback_spring.xml.bat # level: # com.muses.taoshop: debug # path: /data/logs spring: datasource: # 主數據源 shop: url: jdbc:mysql://127.0.0.1:3306/taoshop?autoReconnect=true&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false username: root password: root driver-class-name: com.mysql.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource # 連接池設置 druid: initial-size: 5 min-idle: 5 max-active: 20 # 配置獲取連接等待超時的時間 max-wait: 60000 # 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 time-between-eviction-runs-millis: 60000 # 配置一個連接在池中最小生存的時間,單位是毫秒 min-evictable-idle-time-millis: 300000 # Oracle請使用select 1 from dual validation-query: SELECT 'x' test-while-idle: true test-on-borrow: false test-on-return: false # 打開PSCache,并且指定每個連接上PSCache的大小 pool-prepared-statements: true max-pool-prepared-statement-per-connection-size: 20 # 配置監控統計攔截的filters,去掉后監控界面sql無法統計,'wall'用于防火墻 filters: stat,wall,slf4j # 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄 connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 # 合并多個DruidDataSource的監控數據 use-global-data-source-stat: true # jpa: # database: mysql # hibernate: # show_sql: true # format_sql: true # ddl-auto: none # naming: # physical-strategy: org.hibernate.boot.entity.naming.PhysicalNamingStrategyStandardImpl # mvc: # view: # prefix: /WEB-INF/jsp/ # suffix: .jsp #添加Thymeleaf配置 thymeleaf: cache: false prefix: classpath:/templates/ suffix: .html mode: HTML5 encoding: UTF-8 content-type: text/html #Jedis配置 # jedis : # pool : # host : 127.0.0.1 # port : 6379 # password : redispassword # timeout : 0 # config : # maxTotal : 100 # maxIdle : 10 # maxWaitMillis : 100000
添加html文件
在resources資源文件夾下面新建一個templates文件夾,所有的html文件都丟在這里,靜態資源文件也丟在resources資源文件夾下面
新建一個html文件,然后注意加上<html xmlns:th="http://www.thymeleaf.org">
注意Thymeleaf語法要求比較嚴格 <meta charset="utf-8" >
,不如這樣寫是不可以的,必須加上斜杠的, <meta charset="utf-8" />
Thymeleaf簡單例子
遍歷后臺數據
<!--最新上架--> <div class="first-pannel clearfix"> <div class="index-f clearfix"> <h4 class="index-f-head"> 最新上架 <span>每天都有上新,每天都有驚喜</span> </h4> <div class="index-f-body"> <div class="top-sales newProduct"> <ul class="top-sales-list clearfix"> <li class="top-sales-item newProduct" th:each="item : ${items}"> <p class="item-img"> <a th:href="@{'/portal/item/toDetail/'+${item.spuId}+'/'+${item.skuId}}" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><img th:src="@{${item.imgPath}}" /></a> </p> <p class="item-buss"><a th:href="@{'/portal/item/toDetail/'+${item.spuId}+'/'+${item.skuId}}" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ></a></p> <p class="item-name spec"><a th:href="@{'/portal/item/toDetail/'+${item.spuId}+'/'+${item.skuId}}" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" th:text="${item.itemName}"></a></p> <p class="item-price spec"><em th:text="${item.mPrice}"></em>元</p> </li> </ul> </div> </div> </div> </div> <!--最新上架//-->
引入文件
Thymeleaf引入另外一個html文件可以使用th:replace或者th:include,
<!--topBar--> <div class="topBar" th:replace="/top_bar :: .topBar"></div> <!--//topBar--> <!--headerMain--> <div class="headerMain layout clearfix" th:replace="/header_main :: .headerMain"></div> <!--//headerMain--> <!--headerNav--> <div class="headerNav" th:replace="/index_header_nav :: .headerNav"></div> <!--//headerNav-->
Img便簽src
<img th:src="@{/static/images/rachange_ad.jpg}" />
鏈接<a>便簽
靜態資源使用
<link th:href="@{/static/css/public.css}" rel="external nofollow" rel="external nofollow" rel="stylesheet" type="text/css" /> <link th:href="@{/static/css/index.css}" rel="external nofollow" rel="external nofollow" rel="stylesheet" type="text/css" /> <script type="text/javascript" th:src="@{/static/js/jquery-1.3.2.min.js}"></script> <script type="text/javascript" th:src="@{/static/js/html5.js}"></script> <script type="text/javascript" th:src="@{/static/js/popbox.js}"></script>
給出一個html頁面例子:
<!DOCTYPE HTML> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="utf-8" /> <title>電商門戶網站</title> <link th:href="@{/static/css/public.css}" rel="external nofollow" rel="external nofollow" rel="stylesheet" type="text/css" /> <link th:href="@{/static/css/index.css}" rel="external nofollow" rel="external nofollow" rel="stylesheet" type="text/css" /> <script type="text/javascript" th:src="@{/static/js/jquery-1.3.2.min.js}"></script> <script type="text/javascript" th:src="@{/static/js/html5.js}"></script> <script type="text/javascript" th:src="@{/static/js/popbox.js}"></script> <style type="text/css"> .item-list { display: none; position: absolute; width: 705px; min-height: 200px; _height: 200px; background: #FFF; left: 198px; box-shadow: 0px 0px 10px #DDDDDD; border: 1px solid #DDD; top: 3px; z-index: 1000000; } /* Remove Float */ .clear { display: block; height: 0; overflow: hidden; clear: both; } .clearfix:after { content: '\20'; display: block; height: 0; clear: both; } .clearfix { *zoom:1; } .hover { position: relative; z-index: 1000000000; background: #FFF; border-color: #DDD; border-width: 1px 0px; border-style: solid; } </style> </head> <body> <!--header--> <header class="header"> <!--topBar--> <div class="topBar" th:replace="/top_bar :: .topBar"></div> <!--//topBar--> <!--headerMain--> <div class="headerMain layout clearfix" th:replace="/header_main :: .headerMain"></div> <!--//headerMain--> <!--headerNav--> <div class="headerNav" th:replace="/index_header_nav :: .headerNav"></div> <!--//headerNav--> </header> <!--//header--> <!--container--> <div class="container"> <div class="layout clearfix"> <!--banner--> <div class="banner"> <div class="banner-img"> <ul> <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><img width="727" height="350" th:src="@{/static/images/banner_970x355.jpg}" /></a></li> <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><img width="727" height="350" th:src="@{/static/images/banner_970x355.jpg}" /></a></li> <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><img width="727" height="350" th:src="@{/static/images/banner_970x355.jpg}" /></a></li> </ul> </div> <ul class="banner-btn"> <li class="current"></li> <li></li> <li></li> </ul> </div> <!--//banner--> <!--快捷充值--> <div class="index-fast-recharge"> <div class="recharge-body"> <div class="recharge-head"> <h3><em class="icon-phone"></em>話費充值</h3> </div> <div class="recharge-con"> <div class="recharge-form"> <p> <label class="name">手機號:</label> <input placeholder="支持電信" type="text" class="text-box" /> </p> <p> <label class="name">充值方式:</label> <label> <input type="radio" class="rd" /> 電信充值卡</label> <label> <input type="radio" class="rd" /> 銀行卡</label> </p> <div class="recharge-sub-btn"> <a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="btn btn-red">立即充值</a> </div> </div> <div class="recharge-ad"> <img th:src="@{/static/images/rachange_ad.jpg}" /> </div> </div> </div> </div> <!--//快捷充值--> <div class="clearfix"></div> <!--最新上架--> <div class="first-pannel clearfix"> <div class="index-f clearfix"> <h4 class="index-f-head"> 最新上架 <span>每天都有上新,每天都有驚喜</span> </h4> <div class="index-f-body"> <div class="top-sales newProduct"> <ul class="top-sales-list clearfix"> <li class="top-sales-item newProduct" th:each="item : ${items}"> <p class="item-img"> <a th:href="@{'/portal/item/toDetail/'+${item.spuId}+'/'+${item.skuId}}" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><img th:src="@{${item.imgPath}}" /></a> </p> <p class="item-buss"><a th:href="@{'/portal/item/toDetail/'+${item.spuId}+'/'+${item.skuId}}" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ></a></p> <p class="item-name spec"><a th:href="@{'/portal/item/toDetail/'+${item.spuId}+'/'+${item.skuId}}" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" th:text="${item.itemName}"></a></p> <p class="item-price spec"><em th:text="${item.mPrice}"></em>元</p> </li> </ul> </div> </div> </div> </div> <!--最新上架//--> </div> </div> <!--//container--> <!--footer--> <footer class="footer" th:replace="footer :: .footer"></footer> <!--//footer--> <script type="text/javascript"> //banner $(document).ready(function(){ var demo = $(".banner"); var btn = $(".banner-btn li"); var slide = $(".banner-img ul"); var slideItem = slide.find("li"); var c = 0, speed = 4000 , t; btn.each(function(number){ $(this).click(function(){ $(this).addClass("current").siblings().removeClass("current"); slide.animate({"left":-slideItem.width()*number},300); c = number; }); }); if(btn.size()>1){ autoSlide(); } function timedCount() { c = c + 1; if(c>=btn.size())c = 0; btn.eq(c).click(); } function autoSlide(){ t = setInterval(function(){timedCount();},speed); } //鼠標移入停止播放 demo.mouseover(function(){ clearInterval(t); }); demo.mouseout(function(){ autoSlide(); }); }); </script> </body> </html>
代碼取自個人的開源項目:https://github.com/u014427391/taoshop,有需要可以參考
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。