問題說明
在我的意識中,是主導使用thymeleaf的,因為我一直想知道springboot推薦的它到底有什麼好。在普通的springboot項目中,直接引入thymeleaf的依賴包就可以進行視圖解析了,而在一般的spring項目中還需要我們進行一些手動的配置,於是就出現了這個問題,怎麼整合多個模板引擎在一起。 解決方案 引入thymeleaf的依賴
<!-- https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf --> <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf</artifactId> <version>${thymeleaf.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf-spring3 --> <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf-spring3</artifactId> <version>${thymeleaf.version}</version> </dependency>
thymeleaf的版本2和3都行,3功能更完善一點。
另外tymeleaf-spring3 or thymeleaf-spring4也隨意使用。
2. 配置springmvc視圖解析
關鍵是這一步,這一步網上的版本就多了。我大概分析了一下主要有下面兩種情況: 第一種情況jsp頁面和html頁面分別是位於不同的視圖檔案夾下面 第二種情況兩種頁面同時存在同一個視圖檔案夾中
先來看第一種情況的配置:
這裡可以參考thymeleaf官方的一個寵物商店的配置地址是
thymeleaf官方配置例子
下面是咱們的例子:
<bean id="templateResolver" class="org.thymeleaf.spring3.templateresolver.SpringResourceTemplateResolver"> <property name="prefix" value="WEB-INF/" /> <property name="suffix" value=".html" /> <property name="templateMode" value="HTML5" /> <property name="cacheable" value="false" /> <property name="characterEncoding" value="UTF-8"/> </bean> <bean id="templateEngine" class="org.thymeleaf.spring3.SpringTemplateEngine"> <property name="templateResolver" ref="templateResolver" /> </bean> <!-- 配置多個視圖解析--> <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> <property name="viewResolvers"> <list> <!--used thymeleaf --> <bean class="org.thymeleaf.spring3.view.ThymeleafViewResolver"> <property name="characterEncoding" value="UTF-8"/> <property name="templateEngine" ref="templateEngine" /> <property name="viewNames" value="html/*"/> <property name="order" value="2" /> </bean> <!-- used jsp --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/"/> <property name="suffix" value=".jsp"/> <property name="viewNames" value="jsp/*"/> <property name="order" value="1" /> </bean> </list> </property> </bean>
關鍵點:
<property name="prefix" value="/WEB-INF/"/>
<property name="viewNames" value="/*"/>
接下來說第二種情況的配置:
也就是由第一種配置延伸過來的,prefix的值相同了
<bean id="templateResolver" class="org.thymeleaf.spring3.templateresolver.SpringResourceTemplateResolver"> <property name="prefix" value="WEB-INF/views/" /> <property name="templateMode" value="HTML5" /> <property name="cacheable" value="false" /> <property name="characterEncoding" value="UTF-8"/> </bean> <bean id="templateEngine" class="org.thymeleaf.spring3.SpringTemplateEngine"> <property name="templateResolver" ref="templateResolver" /> </bean> <!-- 配置多個視圖解析--> <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> <property name="viewResolvers"> <list> <!--used thymeleaf --> <bean class="org.thymeleaf.spring3.view.ThymeleafViewResolver"> <property name="characterEncoding" value="UTF-8"/> <property name="templateEngine" ref="templateEngine" /> <property name="viewNames" value="*.html" /> <property name="order" value="1" /> </bean> <!-- used jsp --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="viewNames" value="*.jsp"/> <property name="order" value="2" /> </bean> </list> </property> </bean>
不同的地方在這裡:
<property name="viewNames" value="*.html"/>
<property name="viewNames" value="*.jsp"/>
到這裡還沒完,需要我們在controller層如何返回。
第一種情況return "jsp/abc" || return "thymeleaf/abc"
第二種情況return "abc.jsp" || return "abc.html"