SpringBoot Thymeleaf 本地运行正常,打成jar包或war包后运行报错

最近写SpringBoot项目时遇到的一个问题,在本地运行很正常,一点毛病都没有,直到package打包部署到服务器上运行的时候就出现问题了,而且不是一个页面有这个的问题,经过网上多处查询,说Controller层的返回页面方法要注意/但是我的的确没有/也报错了,于是我把关注点锁定到Thymelefa页面
在之前写项目的经验中我知道如果显示有关Thymeleaf的错误都逃不脱两个点

  1. Controller成的页面跳转方法错误
    (如果方法里只是简单的写了一行return的话,就可以断定是页面的问题了)
  2. Thymelefa页面错误
    (如果你的页面也没有报错或者是IDE编辑器误报的话,那么你可能和我遇到的是同一个问题)

正文

这是我的Controller.java

@Controller
@RequestMapping("/admin")
public class ToAdminNav {

    // @Autowired 省略。。。

    /*后台首页*/
    @GetMapping({"/index.html","/index"})
    public String toAdmin(Model mod){
        // 以下的model查询出来的都由数据(我以及Debug过了)
        mod.addAttribute("user",userService.selUser());
        mod.addAttribute("blog",blogService.getTotalBlogs());
        mod.addAttribute("category",categoryService.getTotalCategories());
        mod.addAttribute("tag",tagService.getTotalTags());
        mod.addAttribute("link",linkService.getTotalLinks());
        mod.addAttribute("comment",commentService.getTotalBlogComments(null));
        mod.addAttribute("date",this.date());
        // 那么关键就是 return 了,我的后台首页当然是在template\admin\index.html 所以这肯定没问题(毕竟本地都能完美跳转)
        return "admin/index";
    }
}

页面template\admin\index.html
由于html内如过多,我就只截取部分进行展示

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head th:replace="~{/admin/public::head(${user.getAuthor()}+' | 首页管理')}">
<body class="hold-transition sidebar-mini">
<div class="wrapper">
    <!-- 引入页面头header-fragment -->
    <nav th:replace="~{/admin/public::header-nav}"></nav>
    <!-- 引入工具栏sidebar-fragment -->
    <aside th:replace="~{/admin/public::aside(${user.getAvatar()},${user.getAuthor()},1)}"></aside>
    <!-- Content Wrapper. Contains page content -->
    <div class="content-wrapper" id="content-wrapper">

从上面的html可以看出我的template\admin\下因该有个public.html公共html

<!-- 引入页面头header-fragment -->
 <nav th:replace="~{/admin/public::header-nav}"></nav>

这里使用 th:replace 引用 template\admin\public.html下的header-nav

<!-- 引入页面头header-fragment -->
<nav th:fragment="header-nav" class="xxxx">xxxxxxx.....</nav>

这也没问题,本地运行能正常显示,关键问题就在打jar包上,因为打jar包后目录结构有改变(可以自己用解压软件解压查看)
当你在admin前面加上/后,Thymelaf就会到根目录去找admin/public.html(也就是绝对路径)

相对路径

  1. …/ 表示当前文件所在的目录的上一级目录
  2. ./ 表示当前文件所在的目录(可以省略)

绝对路径

  1. / 表示当前站点的根目录(根目录等价于绝对路径)
    例如:D:\Lete\Project\src\main\resources\templates\admin\public.html

总结

只需要将admin前面的/去掉即可

<!-- 引入页面头header-fragment -->
 <nav th:replace="~{admin/public::header-nav}"></nav>

这样就可以正常运行了

至于为什么在本地运行正常,这我也说不清楚
博主使用的是IDEA 2020

以后编写代码时要注意观察

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值