1. 程式人生 > >springboot使用thymeleaf模板引擎時出現org.xml.sax.SAXParseException的原因與解決辦法

springboot使用thymeleaf模板引擎時出現org.xml.sax.SAXParseException的原因與解決辦法

異常描述:

在springboot程式當中,使用thymeleaf作為檢視的時候,跳轉到頁面上的時候,會出現org.xml.sax.SAXParseException的異常(SAX解析器解析xml檔案異常),常見的有下面兩種:

org.xml.sax.SAXParseException: 元素型別 "meta" 必須由匹配的結束標記 "</meta>" 終止
org.xml.sax.SAXParseException: 元素型別 "link" 必須由匹配的結束標記 "</link>" 終止

報錯原因非常的清晰易懂,我們在html頁面當中<meta>標籤或者<link>標籤沒有結束標誌,檢視我們的html檔案,會發現可能出現下面兩種情況:

<meta charset="UTF-8"> 
<link rel="stylesheet" href="css/3d.css">

確實是我們沒有加上結束標籤,但是我們一般情況下都可以這麼寫啊,為什麼到了這個程式裡面就會報錯呢?

原因如下:

thymeleaf模板引擎預設是Template modes:HTML5解析的,解析比較嚴格,對html的內容要求很嚴格,假如不符合規範,那麼就會報錯。

解決辦法:

1.嚴格遵守html頁面的編寫規範,該加結束標籤的時候就加結束標籤,嚴格要求自己。

2.偷點懶,告訴程式說別這麼嚴格嘛,換個更友好更親切的去解析,你這麼嚴格我都不會寫程式碼了。

第一步:配置,在application.properties檔案當中加入下面三行。

spring.thymeleaf.content-type=text/html
spring.thymeleaf.mode =LEGACYHTML5
spring.thymeleaf.cache=false

第二步:引入額外的maven依賴(LEGACYHTML5需要搭配一個額外的庫NekoHTML才可用

<!--允許不嚴格的html5格式出現-->
<dependency>
    <groupId>net.sourceforge.nekohtml</groupId>
    <artifactId>nekohtml</artifactId>
    <version>1.9.22</version>
</dependency>

做了以上兩步之後,重啟你的程式吧,不會出現上述錯誤了。