首先创建带有web插件的项目
接着在pom文件中引入依赖(加入视图解析器模块):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
有如下这些配置,请自行选择添加到properties中:
#开启模板缓存(默认值:true)一般都会改成false 因为缓存会影响页面的实时显示
spring.thymeleaf.cache=false
#是否在呈现模板之前检查模板是否存在
spring.thymeleaf.check-template=true
#检查模板位置是否正确(默认值:true)
spring.thymeleaf.check-template-location=true
#是否为Web框架启用Thymeleaf视图解析
spring.thymeleaf.enabled=true
#在SpringEL表达式中启用SpringEL编译器
spring.thymeleaf.enable-spring-el-compiler=false
#模板编码
spring.thymeleaf.encoding=UTF-8
#要被排除在解析之外的视图名称列表,用逗号分隔
spring.thymeleaf.excluded-view-names=
#要运用于模板之上的模板模式。另见TemplateMode(默认值:HTML5)
spring.thymeleaf.mode=HTML5
#在构建URL时添加到视图名称前的前缀(默认值:classpath:/templates/)
spring.thymeleaf.prefix=classpath:/templates/
#逗号分隔的视图名称列表(允许的模式),当设置了最大块大小时,应该是CHUNKED模式中唯一执行的视图名称列表。
spring.thymeleaf.reactive.chunked-mode-view-names=
#即使设置了最大块大小,也应该在FULL模式下执行逗号分隔的视图名称列表(允许的模式)。
spring.thymeleaf.reactive.full-mode-view-names=
#用于写入响应的数据缓冲区的最大大小
spring.thymeleaf.reactive.max-chunk-size=0B
##视图技术支持的媒体类型
spring.thymeleaf.reactive.media-types=
#写入HTTP响应的Content-Type值
spring.thymeleaf.servlet.content-type=text/html
#在构建URL时附加到视图名称的后缀。
spring.thymeleaf.suffix=.html
#Thymeleaf模板解析器在解析器链中的顺序。默认情况下,它排第一位。顺序从1开始,只有在定义了额外的TemplateResolver Bean时才需要设置这个属性。
spring.thymeleaf.template-resolver-order=
#可以解析的逗号分隔的视图名称列表
spring.thymeleaf.view-names=
然后在项目中加入controller类与login页面
内容如下:
controller类:
package com.help.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class TestController {
@GetMapping("/login")
public String login(){
return "login";//地址指向login.html
}
}
login.html
static 用来存放静态资源
templates 用来存放默认的模板配置路径 页面要在templates下面 使用thymeleaf时需要经过controller跳转才能访问 直接访问会报 404 或 500
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Title</title>
</head>
<body>
<h1 style="color: orange">Hello World</h1>
</body>
</html>
然后启动项目,并访问http://localhost:8080/login
出现下图表示正常
》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
在这里我要说遇见的两个坑
错误一:启动后访问路径出现了将返回的字符串打印在了页面上,并没有进入login页面 如下图
错误原因:是因为在controller类中使用了 @RestController
注解(补充 : 如果加上注解 @ResponseBody
也会返回上图的内容)
解决办法:将@RestController
改为 @Controller
在访问就可以了
为什么换了controller注解就好了呢?
@RestController is a stereotype annotation that combines @ResponseBody and @Controller.
意思是:
@RestController注解相当于@ResponseBody + @Controller合在一起的作用。
1)如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
例如:本来应该到login.html页面的,则其显示login.
2)如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
3)如果需要返回json或者xml或者自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解
@ResponseBody:
作用:
该注解用于将Controller方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后(如:json格式),写入到Response对象的body数据区。
使用时机:
返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用
当我们不需要讲数据封装,而是需要实现页面的跳转的时候,就将@responseBody去掉,然后最后返回跳转的页面名称就好.
===============================================================
错误二:访问http://localhost:8080/login
报错 错误如下
org.xml.sax.SAXParseException: 元素类型 "meta" 必须由匹配的结束标记 "</meta>" 终止。
出错原因:meta标签没有闭合 这个自动创建时就这样
解决办法: 可以手动添加一个闭合标签 如 <meta charset="UTF-8" />
补充:
说明:
html5语法
<meta charset="UTF-8">
这里不加结束的反斜杠(/)是不会报错的。
我之前报错的原因是thymeleaf依赖版本过低 当使用 <version>2.1.0.RELEASE</version>
及以上版本是就不会出现上面的 meta为正确结束的错误
本人只是为了记录自己的经历,如果侵犯到您的权益 ,请与1194821568@qq联系
更多推荐
关于springboot加载templates下html遇到的坑
发布评论