SpringBoot集成thymeleaf浏览器404的解决方案

 更新时间:2024年12月12日 10:32:49   作者:十连满潜  
前后端不分离的古早 SpringMVC 项目通常会使用 thymeleaf 模板引擎来完成 html 页面与后端接口之间的交互,如果要将项目架构升级成 SpringBoot , thymeleaf 也可以照常集成,但有时候会踩到一些坑,所以本文给大家介绍了SpringBoot集成thymeleaf浏览器404的解决方案

引言

前后端不分离的古早 SpringMVC 项目通常会使用 thymeleaf 模板引擎来完成 html 页面与后端接口之间的交互。如果要将项目架构升级成 SpringBoot , thymeleaf 也可以照常集成。但有时候会踩到一些坑,特别是如今有了一些 AI 工具,而工具偶尔会抽风时……

相关依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.7.18</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
        <version>2.1.8.RELEASE</version>
    </dependency>
</dependencies>

如果整体项目架构采用的是 SpringCloud ,那么版本号完全可以写在父项目的 pom,或具体的版本管理子项目中,其他的子服务在引入依赖时便无需额外再写一行 version。

按网上大多数的教程,引入依赖时均没有指定版本,我一开始也没指定,项目也没报错,但是启动后又一直无法访问到预计的 html 文件。兜兜转转发现 thymeleaf 居然没引入成功……

这还有个小插曲,我问通义灵码 SpringBoot 2.7.18 对应的 thymeleaf 集成的版本是多少?它给我报了 3.1.8,喜闻乐见找不到,后来在阿里云云效 maven 找了可用版本,才确认了这个 2.7.18.RELEASE 可用。

怎么判断thymeleaf是否成功集成了? 找到thymeleafProperties.class,在里面的 setPrefix 方法打个断点,看看能不能进去,能进去就说明正常了。

文件结构

一个最简单的 SpringBoot 项目,要求启动后访问目标端口时能访问到自定义首页,先不管首页内容是什么、长什么样,新建一个 html 总是没错的。但新建在哪里呢?

哪里都可以。

考虑到 SpringBoot 项目打包后都是一个完整的 jar 包,这意味着如果不做干预的话,前端文件到时候也会被打包在 jar 中,修改起来就相当麻烦。好在它可以被配置,因此可以做到相当程度的 “伪” 前后端分离。

配置写在 resources 下 application.yaml 文件的 spring.thymeleaf.prefix 里。

这里如果不修改的话,它默认对应的是 classpath:/templates/

spring:
  thymeleaf:
    prefix: file:xxxx/my-cloud2/ui/templates/
    suffix: .html
    cache: false
    mode: HTML
    encoding: UTF-8

踩坑之路

一开始没引入成功时,项目启动是完全正常的,控制台也没有报错,只有浏览器一直在 404 。

不得已,多配置了几行日志处理的参数。

logging:
  level:
    org:
      springframework:
        web:
          servlet:
            DispatcherServlet: DEBUG
        thymeleaf: DEBUG

才在控制台看到 404 真正对应的内容。

虽然看起来也没什么用。

我一开始的 controller 相当简单,通过 /user 进入 index 视图:

@RequestMapping("user")
@Controller
public class UserController {

    @GetMapping("/")
    public String init(){
        return "index";
    }
}

404 后我又把 return 的字符串改成/index index.html /templates/index,但全部无效,心灰意冷地把 /templates/index 发给 AI,它说这种写法通常是WEB-INF路径下的文件,于是灵机一动,才终于发现是我的thymeleaf从头到尾没引入成功(pom里面的引入配置无法用 ctrl +鼠标左键跳转进入,而我之前看它没红就没管了……)

但实际上,即使我在 resources 文件夹下新建一个 WEB-INF 再把我的 index.html 拷贝进去,它也还是 404 。这个没太搞明白,鉴于也不是我的目标,就没管了,大概率配置上的问题两相干扰,结果谁都指望不上。加了 spring-boot-starter-thymeleaf 的版本号后才正常些。

踩坑支线

通常在配置修改无效的时候,第一个怀疑的是浏览器或 IDEA 的缓存,浏览器用 ctrl + F5,有时候得进配置里搜索 “缓存” 后手动清除(我的 Chrome 有时候得这样),IDEA的缓存就 File->Invalidate Caches / Restart ,再不行就 mvn clean 。

其实还有个地方,即便原先配置没错,只是重新选择一下,有时候都挺能解决问题的(原理可能也是缓存?)

它就是:File->Project Settings->Modules->各个项目->Dependencies->Module SDK

打扫干净后,再启动就正常了。

到此这篇关于SpringBoot集成thymeleaf浏览器404的解决方案的文章就介绍到这了,更多相关SpringBoot集成thymeleaf 404内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Springboot应用中Mybatis输出SQL日志的3种方法代码示例

    Springboot应用中Mybatis输出SQL日志的3种方法代码示例

    在前台请求数据的时候,sql语句一直都是打印到控制台的,有一个想法就是想让它打印到日志里,该如何做呢?这篇文章主要给大家介绍了关于Springboot应用中Mybatis输出SQL日志的3种方法,需要的朋友可以参考下
    2024-01-01
  • Springboot读取templates文件html代码实例

    Springboot读取templates文件html代码实例

    这篇文章主要介绍了Springboot读取templates文件html代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Struts2返回json格式数据代码实例

    Struts2返回json格式数据代码实例

    这篇文章主要介绍了Struts2返回json格式数据代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Scala之文件读取、写入、控制台操作的方法示例

    Scala之文件读取、写入、控制台操作的方法示例

    这篇文章主要介绍了Scala之文件读取、写入、控制台操作的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • java读取resources文件详解及实现代码

    java读取resources文件详解及实现代码

    这篇文章主要介绍了java读取resources文件详解及实现代码的相关资料,在开发项目的时候经常会遇到读取文件夹里面的内容,需要的朋友可以参考下
    2017-07-07
  • Springboot @Async多线程获取返回值方式

    Springboot @Async多线程获取返回值方式

    这篇文章主要介绍了Springboot @Async多线程获取返回值方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • MyBatis Generator的简单使用方法示例

    MyBatis Generator的简单使用方法示例

    这篇文章主要给大家介绍了关于MyBatis Generator的简单使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 一文讲解如何优雅的调试jar包

    一文讲解如何优雅的调试jar包

    在现实开发过程中,现场环境永远比开发环境复杂,下面这篇文章主要给大家介绍了关于如何优雅的调试jar包的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • java如何删除非空文件夹

    java如何删除非空文件夹

    这篇文章主要介绍了java如何删除非空文件夹问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • SpringBoot内嵌tomcat处理有特殊字符转义的问题

    SpringBoot内嵌tomcat处理有特殊字符转义的问题

    这篇文章主要介绍了SpringBoot内嵌tomcat处理有特殊字符转义的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06

最新评论