今天在看视频学习spring boot
时遇到一点问题,视频时间稍微有点早,而技术发展的又很快,就导致当时的设置现在好像不起作用,现在解决了。
教程教导模板引擎thymeleaf
的使用,然而spring boot
框架默认给我们设置的是thymeleaf2
,这个版本太老了,需要切换到thymeleaf3
,按照视频里的教程到官方文档翻了一下,没有找到,于是按照之前的方法,使用thymeleaf
前在pom
文件里引入如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
切换版本:
<properties>
<java.version>1.8</java.version>
<thymeleaf.version>3.0.0.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.0.0</thymeleaf-layout-dialect.version>
</properties>
然后发现,这个方法可以正常运行不会报错,但是在使用时会报错:
报错如下之后上了thymeleaf的官网看了一下,添加了下面两个依赖
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring4</artifactId>
<version>3.0.0.RELEASE</version>
</dependency>
同样的错误:
imagegoogle了一下,这篇博文写比较详细
当没有声明ViewResolver时,spring会给你注册一个默认的ViewResolver,就是JstlView的实例, 该对象继承自InternalResoureView。
JstlView用来封装JSP或者同一Web应用中的其他资源,它将model对象作为request请求的属性值暴露出来, 并将该请求通过javax.servlet.RequestDispatcher转发到指定的URL.
Spring认为, 这个view的URL是可以用来指定同一web应用中特定资源的,是可以被RequestDispatcher转发的。
也就是说,在页面渲染(render)之前,Spring会试图使用RequestDispatcher来继续转发该请求。
所以问题就是thymeleaf没有正确引入,所以导致视图解析器不起作用。
最后试了一下引入这两个依赖,properties不需要更改,问题成功解决了:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring4</artifactId>
<version>3.0.0.RELEASE</version>
</dependency>
网友评论