序:css
Thymeleaf官方參考文檔:https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#a-multi-language-welcomehtml
關於thymeleaf2.x與thymeleaf3.x的區別(官方文檔):https://www.thymeleaf.org/doc/articles/thymeleaf3migration.htmljava
正文:web
1.咱們須要在Pom文件中加入以下依賴:spring
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
2.application.properties配置文件中加入以下配置:apache
#thymeleaf模板配置 spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html spring.thymeleaf.mode=LEGACYHTML5 spring.thymeleaf.encoding=UTF-8 spring.thymeleaf.content-type=text/html #熱部署文件,頁面不產生緩存,及時更新 spring.thymeleaf.cache=false spring.resources.chain.strategy.content.enabled=true spring.resources.chain.strategy.content.paths=/**
3.在templates目錄下寫一個測試文件:緩存
<!DOCTYPE html> <html lang = "en" xmlns:th = "http://www.thymeleaf.org"> <head> <meta charset = "UTF-8"> <title>Title</title> </head> <body> <h1 th:text = "${host}">Hello World</h1> </body> </html>
4.寫一個Controller方法測試:tomcat
package com.flying.eurekaclient; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping("thymeleaf") public class TestThymeleafController { @RequestMapping("test_thymeleaf1") public String test_thymeleaf1(Model model) { model.addAttribute("host", "http://blog.didispace.com"); return "test_thymeleaf1"; } }
5.啓動SpringBoot項目,發現出現以下異常:websocket
org.thymeleaf.exceptions.ConfigurationException: Cannot perform conversion to XML from legacy HTML: The nekoHTML library is not in classpath. nekoHTML 1.9.15 or newer is required for processing templates in "LEGACYHTML5" mode [http://nekohtml.sourceforge.net]. Maven spec: "net.sourceforge.nekohtml::nekohtml::1.9.15". IMPORTANT: DO NOT use versions of nekoHTML older than 1.9.15. at org.thymeleaf.templateparser.html.AbstractHtmlTemplateParser.parseTemplate(AbstractHtmlTemplateParser.java:90) ~[thymeleaf-2.1.6.RELEASE.jar:2.1.6.RELEASE] at org.thymeleaf.TemplateRepository.getTemplate(TemplateRepository.java:278) ~[thymeleaf-2.1.6.RELEASE.jar:2.1.6.RELEASE] at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1104) ~[thymeleaf-2.1.6.RELEASE.jar:2.1.6.RELEASE] at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1060) ~[thymeleaf-2.1.6.RELEASE.jar:2.1.6.RELEASE] at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1011) ~[thymeleaf-2.1.6.RELEASE.jar:2.1.6.RELEASE] at org.thymeleaf.spring4.view.ThymeleafView.renderFragment(ThymeleafView.java:335) ~[thymeleaf-spring4-2.1.6.RELEASE.jar:2.1.6.RELEASE] at org.thymeleaf.spring4.view.ThymeleafView.render(ThymeleafView.java:190) ~[thymeleaf-spring4-2.1.6.RELEASE.jar:2.1.6.RELEASE] at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1286) ~[spring-webmvc-4.3.18.RELEASE.jar:4.3.18.RELEASE] at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1041) ~[spring-webmvc-4.3.18.RELEASE.jar:4.3.18.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:984) ~[spring-webmvc-4.3.18.RELEASE.jar:4.3.18.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) ~[spring-webmvc-4.3.18.RELEASE.jar:4.3.18.RELEASE] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) ~[spring-webmvc-4.3.18.RELEASE.jar:4.3.18.RELEASE] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) ~[spring-webmvc-4.3.18.RELEASE.jar:4.3.18.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:635) ~[tomcat-embed-core-8.5.31.jar:8.5.31] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) ~[spring-webmvc-4.3.18.RELEASE.jar:4.3.18.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) ~[tomcat-embed-core-8.5.31.jar:8.5.31] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-8.5.31.jar:8.5.31] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.31.jar:8.5.31] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) ~[tomcat-embed-websocket-8.5.31.jar:8.5.31] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-8.5.31.jar:8.5.31] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-8.5.31.jar:8.5.31] at org.springframework.web.servlet.resource.ResourceUrlEncodingFilter.doFilter(ResourceUrlEncodingFilter.java:59) ~[spring-webmvc-4.3.18.RELEASE.jar:4.3.18.RELEASE]
緣由:咱們使用了以下配置mvc
spring.thymeleaf.mode=LEGACYHTML5
,這個配置表示咱們寫的thymeleaf模版不須要嚴格執行HTML5標準的語法校驗,
可是使用這個配置咱們須要引入nekoHTML依賴包,上面的異常提示的很是清楚,而且版本不能低於1.9.15,這個應該是與本身使用的SpringBoot版本有關(個人SpringBoot版本是1.5.14.RELEASE),按照錯誤提示咱們在pom文件中加入以下依賴:
<dependency> <groupId>net.sourceforge.nekohtml</groupId> <artifactId>nekohtml</artifactId> <version>1.9.22</version> </dependency>
重啓項目,訪問http://localhost:8762/thymeleaf/test_thymeleaf1,正確顯示以下:
Tips:
這裏咱們寫的html文件做爲thymeleaf模版文件進行解析,那要是咱們要訪問寫的靜態HTML文件怎麼辦呢,解決方案以下:
1.咱們能夠將靜態HTML文件也放入templates目錄下,可是這樣的話咱們對每個HTML文件的訪問都須要寫一個controller方法去映射該靜態文件的訪問路徑,這樣無疑是多餘的,此方法不可取。
2.SpringBoot給咱們提供了專門用於訪問靜態資源文件的目錄,即static目錄,咱們只須要將靜態文件(靜態html,css,js,圖片文件等)放入到static目錄下便可,可是咱們訪問靜態文件時不須要加上路徑/static,SpringBoot會自動到該目錄去找。
以下圖所示,咱們在static目錄下新建一個目錄pages,而後在該目錄下新建一個靜態html文件:
<!DOCTYPE html> <html lang = "en" xmlns:th = "http://www.thymeleaf.org"> <head> <meta charset = "UTF-8"> <title>Title</title> </head> <body> <h1 th:text = "${host}">Hello World</h1> </body> </html>
訪問http://localhost:8762/pages/test_thymeleaf2.html,頁面正確顯示:
1.在SpringBoot的配置文件中加入以下配置(對應本身的國際化信息文件目錄):
對應的國際化信息文件以下圖所示:
spring.messages.basename的默認值是message,且國際化信息文件在resources根目錄下。
2.在thymeleaf模版文件中使用國際化,如圖所示(使用#表達式):
#表達式還有其餘用法,詳情參見博文開頭提供的官方文檔連接。
3.顯示效果以下:
國際化信息文件內容以下:
。
Tips:
國際化信息文件必須提供默認信息文件,不然國際化功能沒法正常使用,即不帶相似國家後綴"zh_CN"等。
以下圖所示:
1.Thymeleaf2.x版本里只支持th:include, th:replace,不支持th:insert,且不能使用~{}表達式,例如不能像以下圖所示這樣寫:
,只能這樣寫:
2..Thymeleaf3.x版本里支持th:include, th:replace,th:insert三種,且可使用~{}表達式。
更多關於thymeleaf2.x與thymeleaf3.x的區別詳見官方文檔:https://www.thymeleaf.org/doc/articles/thymeleaf3migration.html