===========================freemarker===================================css
freemarker 官網:https://freemarker.apache.org/html
freemarker starter:html5
1 <dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-freemarker</artifactId> 4 <version>1.5.15.RELEASE</version> 5 </dependency>
note: web
一、可使用freemarker的starer來構建web MVC應用spring
二、spring MVC支持使用freemarkerchrome
三、FreeMarkerViewResolver的id是"freeMarkerViewResolver"數據庫
四、能夠經過外部配置改變資源的加載路徑,咱們可使用spring.freemarker.templateLoaderPath來自定義,可是默認的路徑是"classpath:/templates/"apache
五、freemarker文件的前綴和後綴一樣能夠經過外部配置來改變,咱們能夠用spring.freemarker.prefix和spring.freemarker.suffix來自定義,可是默認的前綴和後綴分別是空和「.ftl」。(4和5也能夠經過配置bean來覆蓋默認配置)瀏覽器
六、關注類org.springframework.boot.autoconfigure.freemarker.FreeMarkerAutoConfiguration緩存
七、若是想經過不用重啓容器而達到從新加載模板,咱們能夠配置spring.freemarker.cache = false
八、freemaker能夠覆蓋spring boot的錯誤提示頁面,只要在「classpath:/templates/」下建立名爲「error.ftl」的ftl模板文件。
九、spring boot中freemarker配置項
1 spring.freemarker.cache=false # 啓用模板緩存。 2 3 spring.freemarker.charset=UTF-8 # 模板編碼。 4 5 spring.freemarker.content-type=text/html # Content-Type的值 6 7 spring.freemarker.enabled=true # 開啓MVC視圖解析 8 9 spring.freemarker.prefix= # 在構建URL時添加前綴到視圖名稱以前。 10 11 spring.freemarker.suffix=.ftl # 模板文件的後綴名稱。 12 13 spring.freemarker.template-loader-path=classpath:/templates/ #以逗號分隔的模板路徑列表。
十一、此版本的spring boot依賴的freemarker依賴
1 <dependency> 2 <groupId>org.apache</groupId> 3 <artifactId>freemarker</artifactId> 4 <version>2.3.28</version> 5 </dependency>
十二、freemarker經常使用語法
pojo屬性的獲取:定義了pojo,使用Map存儲pojo ${pojo.attribute} 循環中各個值的獲取:定義了List,使用Map存儲List <#list targetList as littleList> ${littleList.attribute} </#list> 循環下標的獲取:定義了List,使用Map存儲List <#list targetList as littleList> ${littleList_index} ${littleList.attribute} </#list> if的使用:定義了List,使用Map存儲List <#list targetList as littleList> <#if littleList_index%2 == 0> 1 <#else> 2 </#if> ${littleList.attribute} </#list> 日期處理:定義了日期date,使用Map存儲日期 注意:日期在freemaker中顯示時須要轉換爲String ${date?date} 格式 xx-xx-xx ${date?time} 格式 xx:xx:xx ${date?datetime} 格式 xx-xx-xx xx:xx:xx 注意:咱們能夠自定格式 ${date?string('yy/MM/dd HH:mm:ss')} null值的處理:定義了變量var,使用Map存儲var ${var!」defaultValue」} 或者使用<#if>判斷 <#if var??> var不是Null,var=${var} <#else> var是null </#if> 添加頁眉頁腳:定義了另外一個freemaker文件other.ftl <#include 「other.ftl」>
===========================Thymeleaf===================================
thymeleaf 官網:https://www.thymeleaf.org
thymeleaf starter:
1 <dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-thymeleaf</artifactId> 4 <version>1.5.15.RELEASE</version> 5 </dependency>
note:
一、可使用 thymeleaf 的starer來構建web MVC應用
二、spring MVC支持使用 thymeleaf
三、ThymeleafViewResolver 的id是"thymeleafViewResolver"
四、freemarker文件的前綴和後綴一樣能夠經過外部配置來改變,咱們能夠用spring.thymeleaf.prefix和spring.thymeleaf.suffix來自定義,可是默認的前綴和後綴分別是「classpath:/templates/」和「.html」。
五、關注類org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration
六、若是想經過不用重啓容器而達到從新加載模板,咱們能夠配置spring.thymeleaf.cache = false
七、經過上面的starter啓用的thymeleaf的版本是2.1,若是想要使用thymeleaf 3.0以上版本,須要作以下的配置:
前提是項目正在使用spring-boot-starter-parent,在pom.xml中的properties標籤中配置thymeleaf.version和thymeleaf-layout-dialect.version屬性覆蓋2.1版本
1 <properties> 2 <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version> 3 <thymeleaf-layout-dialect.version>2.1.1</thymeleaf-layout-dialect.version> 4 </properties>
爲避免出現關於不推薦使用HTML 5模板模式的警告消息以及正在使用的HTML模板模式,咱們能夠在配置文件作一點配置來消除這些警告。配置文件application.properties的配置:
1 spring.thymeleaf.mode: HTML
八、thymeleaf能夠覆蓋spring boot的錯誤提示頁面,只要在「classpath:/templates/」下建立名爲「error.html」的html模板文件。
九、spring boot中thymeleaf配置項
1 # THYMELEAF (ThymeleafAutoConfiguration) 2 spring.thymeleaf.cache=true # 啓用模板緩存。 3 4 spring.thymeleaf.content-type=text/html # Content-Type配置。 5 6 spring.thymeleaf.enabled=true # 啓動MVC Thymeleaf 視圖解析。 7 8 spring.thymeleaf.encoding=UTF-8 # 設置模板的編碼。 9 10 spring.thymeleaf.mode=HTML5 # 配置模板使用的模板模式。 11 12 spring.thymeleaf.prefix=classpath:/templates/ # 在構建URL時添加前綴到視圖名稱以前。 13 14 spring.thymeleaf.suffix=.html # 模板文件的後綴名稱。 15 16 spring.thymeleaf.view-names= # 以逗號分隔的能夠解析的視圖名稱列表。
十、此版本的spring boot依賴的thymeleaf依賴
1 <dependency> 2 <groupId>org.thymeleaf</groupId> 3 <artifactId>thymeleaf</artifactId> 4 <version>2.1.6.RELEASE</version> 5 </dependency>
6
7 <dependency>
8 <groupId>org.thymeleaf</groupId>
9 <artifactId>thymeleaf-spring4</artifactId>
10 <version>2.16.RELEASE</version>
11 </dependency>
十一、thymeleaf的使用
1)引入thymeleaf的DTD和xmlns命名空間,不然thymeleaf的語法將不會在html模板文件上生效。html文件的配置:
1 <!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-4.dtd"> <!--very important!--> 2 3 <html xmlns="http://www.w3.org/1999/xhtml" 4 xmlns:th="http://www.thymeleaf.org"> <!--very important!--> 5 6 <head></head> 7 8 <body> 9 <p text:th=#{blog.welcome}>welcome my blog!</p> 10 </body> 11 12 </html>
2)、註釋
①標準的html/xml註釋
1 <!-- <p>我是註釋!</p> -->
②Thymeleaf 解析級別的註釋塊,能夠放置標籤,直接用chrome瀏覽器打開時,能夠看到註釋中的效果,可是當Thymeleaf在處理時,註釋塊會被移除。
1 <!--/*--> 2 <table> 3 <tr> 4 <td>1</td> <td>2</td> 5 </tr> 6 7 <tr> 8 <td>3</td> <td>4</td> 9 </tr> 10 </table> 11 <!--*/-->
③Thymeleaf 原型註釋塊,能夠放置標籤,直接用chrome瀏覽器打開時,看不到標籤的效果,可是當Thymeleaf在處理時,註釋塊中的標籤會當作是正常的,<!--/*/ 和 /*/-->會被移除。
1 <span>start!</span> 2 <!--/*/ 3 <div th:text="${pwd}"> 4 銀行密碼:123456 5 </div> 6 /*/--> 7 <span>end!</span>
④th:block 標籤:<th:bllock></th:block>,直接用chrome瀏覽器打開時,會看到一個2x2表格,即一個默認user的信息,它不是從數據庫中取出的信息。當Thymeleaf處理時,會動態生成多個user的信息。
1 <table border="1px solid red"> 2 <th:block th:each="user : ${users}"> 3 <tr> 4 <td th:text="${user.name}">rui</td> 5 <td th:text="${user.sex}">male</td> 6 </tr> 7 <tr> 8 <td th:text="${user.age}">18</td>
<td th:text="${user.address}">China</td> 9 </tr> 10 </th:block> 11 </table>
chrome瀏覽器運行效果:
3)用到過的語法
下面四個搭配${}使用,須要用雙引號括起來 th:text = "${}" 文本,瀏覽器會忽略它 th:each = "item : ${Object}" item === 迭代變量 ${Object} =====迭表明達式 th:each的更多內容參考 :https://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#iteration th:if = "${}" ==== 若是 th:unless = "${}" =====若是不 假設有個需求要判斷某個容器不爲空,能夠有兩種方式: th:if="${not #lists.isEmpty(store)}" === th:unless="${#lists.isEmpty(store)}" 下面三個搭配使用 th:fragment="fragmentName" ==== 其餘模板,並命名爲"fragmentName" th:include=" templateName :: fragmentName" =====將片斷的內容包含到主標籤中,主標籤仍是原來的標籤 th:replace=" templateName :: fragmentName" ====== 將片斷標籤替換主標籤,主標籤變成片斷的標籤 更多例子可參考:https://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#template-layout 下面兩個搭配@{}使用,須要使用雙引號括起來 th:src = "@{}" 圖片路徑等 th:href = "@{}" 跳轉連接等 th:href用法小結:
<a th:href="@{/find/page(pageNum=${pageInfo.pageNum},pageSize=${pageInfo.pageSize})}">
與jsp的寫法相比,簡短許多。
注意幾個地方:
1,上下文 =====> /
2,?符號 =====> ()
3,&符號 =====> , ${} 變量表達式 @{} URL表達式 #{} 消息表達式,能夠做提取國際化信息用 內置對象 對象的方法 #lists isEmpty()
thymeleaf 和spring boot整合的幾個問題
①DTD引入的話,工程報錯??? dtd文件引錯,應該是:thymeleaf-spring4-4.dtd
②路徑的配置??? 圖片,css。瀏覽器沒法訪問,報406,500狀態碼。
改形成不用th:src="@{}",th:href="@{}"配置路徑,直接配置src和href,瀏覽器沒法訪問,報406,500狀態碼
org.springframework.web.HttpMediaTypeNotAcceptableException: Could not find acceptable representation.
緣由是靜態資源文件命名的時候帶有error關鍵字,改爲1.png和1.css,能夠訪問到
2018-12-08 15:34:51
spring boot,jdbc,thymeleaf整合
html5 模板,不用引入thymeleaf的DTD
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"/> <title>hello</title> </head> <body> </body> </html>
jdbcTemplate.queryForObject() 查詢一個對象,當查出不存在時,程序拋出異常 org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0
1 user = jdbcTemplate.queryForObject("select * from user where id = ?", new Object[]{id}, new BeanPropertyRowMapper<User>(User.class));
做異常處理 [參考博客:http://www.javashuo.com/article/p-vgxootrb-de.html]
1 package com.rui.dao; 2 3 import com.rui.pojo.User; 4 import org.springframework.beans.factory.annotation.Autowired; 5 import org.springframework.jdbc.core.BeanPropertyRowMapper; 6 import org.springframework.jdbc.core.JdbcTemplate; 7 import org.springframework.stereotype.Repository; 8 9 @Repository 10 public class UserDao { 11 12 @Autowired 13 private JdbcTemplate jdbcTemplate; 14 15 public User getUserById(Integer id) { 16 17 User user = null; 18 try { 19 user = jdbcTemplate.queryForObject("select * from user where id = ?", new Object[]{id}, new BeanPropertyRowMapper<User>(User.class)); 20 21 } catch (Exception e) { 22 return null; // 異常處理 23 } 24 25 System.out.println(user.toString()); 26 return user; 27 28 } 29 }
final note:
參考資料:spring-boot-reference.pdf (spring boot 1.5.15)