踩坑二--springboot加载templates下html遇到的坑

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/a1194821568/article/details/90719896

首先创建带有web插件的项目
在这里插入图片描述
接着在pom文件中引入依赖(加入视图解析器模块):

        <dependency>
		   <groupId>org.springframework.boot</groupId>
		   <artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>

   
   
  • 1
  • 2
  • 3
  • 4

有如下这些配置,请自行选择添加到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=
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

然后在项目中加入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
}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

login.html

static 用来存放静态资源
templates 用来存放默认的模板配置路径     页面要在templates下面  使用thymeleaf时需要经过controller跳转才能访问 直接访问会报 404 或 500

 
 
  • 1
  • 2
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Title</title>
</head>
<body>
    <h1 style="color: orange">Hello World</h1>
</body>
</html>

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

然后启动项目,并访问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>" 终止。

 
 
  • 1

出错原因:meta标签没有闭合 这个自动创建时就这样
在这里插入图片描述
解决办法: 可以手动添加一个闭合标签 如 <meta charset="UTF-8" />

补充

说明:
     html5语法 
     <meta charset="UTF-8">
     这里不加结束的反斜杠(/)是不会报错的。

 
 
  • 1
  • 2
  • 3
  • 4

我之前报错的原因是thymeleaf依赖版本过低 当使用 <version>2.1.0.RELEASE</version> 及以上版本是就不会出现上面的 meta为正确结束的错误

本人只是为了记录自己的经历,如果侵犯到您的权益 ,请与1194821568@qq.com联系

                                </div>
            <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-e44c3c0e64.css" rel="stylesheet">
                </div>
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值