SpringBoot项目打包部署后页面无法访问问题定位处理记录

news2024/11/24 19:50:21

问题描述

项目在idea中可以正常访问,但是达成jar包后访问时候访问异常,并报错,部分异常栈如下:

org.thymeleaf.exceptions.TemplateInputException: Error resolving template [/views/login], template might not exist or might not be accessible by any of the configured Template Resolvers
        at org.thymeleaf.engine.TemplateManager.resolveTemplate(TemplateManager.java:869) ~[thymeleaf-3.0.15.RELEASE.jar!/:3.0.15.RELEASE]
        at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:607) ~[thymeleaf-3.0.15.RELEASE.jar!/:3.0.15.RELEASE]
        at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1098) [thymeleaf-3.0.15.RELEASE.jar!/:3.0.15.RELEASE]
        at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1072) [thymeleaf-3.0.15.RELEASE.jar!/:3.0.15.RELEASE]
        at org.thymeleaf.spring5.view.ThymeleafView.renderFragment(ThymeleafView.java:366) [thymeleaf-spring5-3.0.15.RELEASE.jar!/:3.0.15.RELEASE]
        at org.thymeleaf.spring5.view.ThymeleafView.render(ThymeleafView.java:190) [thymeleaf-spring5-3.0.15.RELEASE.jar!/:3.0.15.RELEASE]
        at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1406) [spring-webmvc-5.3.27.jar!/:5.3.27]
        at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1150) [spring-webmvc-5.3.27.jar!/:5.3.27]
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) [spring-webmvc-5.3.27.jar!/:5.3.27]

可以看到是TemplateManager中resolveTemplate方法报错了

问题排查

因为只有打包后jar运行才报错,问了定位问题,本地启动jar时候开启一个远程debug端口5005,启动命令如下:

java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 target/pro-artifact-1.0.0.jar 

IDEA添加Remote JVM Debug

 定位

问题代码入口

 问题节点

此处返回null导致无法加载页面,继续跟踪tempalteResource.exists方法,检查为什么返回false

 exists方法检查

到此处,问题已经明了,path中多了一个斜杠。原因spring.thymleaf.prefix值为classpath:/templates/,但是配置页面以/views/开头,导致多一个/,这个在idea中没影响,但是部署jar执行的时候却无法识别。

thymleaf相关的yml配置

spring:
  thymeleaf:
    cache: false  #关闭 Thymeleaf 的缓存开发过程中无需重启
    encoding: UTF-8 #设置thymeleaf页面的编码
    mode: HTML
    #设置thymeleaf页面的后缀
    suffix: .html
    #设置thymeleaf页面的存储路径
    prefix: classpath:/templates/

页面配置

@RequestMapping("/{pageName}")
    public ModelAndView router(@PathVariable String pageName, HttpServletRequest request) {
        ModelAndView modelAndView = new ModelAndView("/views/" + pageName);
        modelAndView.addObject("ctx", request.getContextPath());
        Subject subject = SecurityUtils.getSubject();
        String loginUserName = String.valueOf(subject.getPrincipal());
        User user = new User();
        user.setUserName(loginUserName);
        modelAndView.addObject("user", user);
        return modelAndView;
    }

解决方法

配置页面的时候检查前缀和页面配置,确保不要重复配置斜杠(/)。案例中讲prefix修改为classpath:/templates即可解决问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/721410.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

插入排序(直接插入排序 折半插入排序)

直接插入排序 void InsertSort(ElemType A[],int n) {int i,j;for(i2;i<n;i)if(A[i]<A[i-1]){A[0]A[i];for(ji-1;A[0]<A[j];--j)A[j1]A[j];A[j1]A[0];} }折半插入排序 void BinInsertSort(int A[],int n) {int i,j,low,high,mid;for(i2;i<n;i){A[0]A[i];low1;high…

【MySQL】基本查询之表的增删改查

【MySQL】表的增删改查 一、插入操作----insert1.1 简单插入1.2 插入时是否更新----ON DUPLICATE KEY UPDATE1.3 插入时替换----REPLACE 二、查询----select2.1 简单查询与去重2.2 基本查询----where条件2.2.3 案列演示 2.4 排序----order by 三、修改操作----update四、删除--…

产品经理有效管理项目进度的5个关键方法

作为产品经理&#xff0c;管理项目进度是确保产品开发成功的关键组成部分。产品经理负责推动产品开发过程&#xff0c;并确保团队在最后期限前完成并保持在正轨上。以下是产品经理有效管理项目进度的一些关键方法。 1、创建详细的项目进度表 这个时间表应该包括开发过程的所有任…

java业务开发经典常见错误例子

java业务开发经典常见错误例子 文章目录 java业务开发经典常见错误例子1.ThreadLocal线程重用导致用户信息错乱的 Bug2.使用了线程安全的并发工具&#xff0c;并不代表解决了所有线程安全问题3.没有认清并发工具的使用场景&#xff0c;导致性能问题4.加锁前要清楚锁和被保护的对…

DM8:达梦数据库数据文件与日志文件介绍

DM8:达梦数据库数据文件与日志文件介绍 环境介绍1 表空间中的数据文件1.1 表空间1.2 数据文件1.3 系统自带的表空间1.3.1 SYSTEM 表空间1.3.2 ROLL 表空间1.3.3 TEMP 表空间1.3.4 MAIN 表空间1.3.5 用户自定义表空间1.3.6 DM数据库的表空间和数据文件分布 2 日志文件2.1 重做日…

Redis 数据库的概念、常用命令

Redis数据库 一、关系数据库与非关系型数据库概述1、关系型数据库2、非关系型数据库3、关系数据库与非关系型数据库区别&#xff08;1&#xff09;数据存储方式不同&#xff08;2&#xff09;扩展方式不同&#xff08;3&#xff09;对事务性的支持不同 4、非关系型数据库产生背…

【数据结构课程设计系列】完全二叉树操作演示

完全二叉数操作演示 1.完全二叉树操作演示要求&#xff1a; &#xff08;1&#xff09;创建完全二叉树(用顺序方式存储) &#xff08;2&#xff09;求二叉树的深度和叶子结点数 &#xff08;3&#xff09;实现二叉树的前序、中序、后序和层次遍历。 &#xff08;4&#xff09;…

基于ubuntu的驱动开发

一般的linux驱动开发都是基于交叉编译来进行的&#xff0c;本文尝试着从另一个角度&#xff1a;基于ubuntu的本地驱动开发来学习一下驱动的开发 一、驱动的开发与编译 1.1、编写驱动文件 #include <linux/init.h> #include <linux/module.h> static int hello_i…

FL Studio中文版21最新免费音乐编曲软件制作工具

FL Studio较为适合专业的音乐制作者&#xff0c;操作难度较大&#xff0c;学习门槛也较高&#xff1b;Studio One则主打一站式的音乐制作&#xff0c;从编曲到录音到后期的专辑制作都可以在其中实现&#xff0c;同时操作难度不大&#xff0c;对初学者和业余爱好者都较为友好。 …

【NX】NX二次开发中自动选择当前实体和方向

在NX的二次开发中&#xff0c;我们经常需要选择实体和方向&#xff0c;如果每次手动选择&#xff0c;势必会影响调试的效率&#xff0c;那么有没有办法&#xff0c;让程序一启动就自动选择当前实体和方向呢&#xff0c;自然是有的。 经过我一番研究&#xff0c;因为可能有多个实…

Apikit 自学日记:团队管理

团队管理 一、工作空间管理 工作空间类似于部门或公司的概念&#xff0c;能帮助您更好地管理团队。 1.1 创建空间 点击页面左上角功能菜单&#xff0c;在下拉菜单中选择要切换的工作空间。 点击创建/加入&#xff0c;在引导页面中选择创建工作空间&#xff0c;填写工作空间…

JavaWeb HttpServletRequest

1.HttpServletRequest HttpServletRequest是Java Servlet API中的一个接口&#xff0c;用于表示HTTP请求的对象。 它提供了访问HTTP请求的各种信息和功能&#xff0c;包括请求方法、请求URL、请求头、请求参数、请求体等。 HttpServletRequest是由Servlet容器&#xff08;如…

利用PPT制作简单的矢量图

1.用PPT画一个图形&#xff08;可以多个图&#xff09; 2.鼠标圈住图形 3.利用 Ctrl G 组合图形&#xff0c;再用 Ctrl C 复制 4.打开word—粘贴—选择性粘贴—图片&#xff08;增强性图元文件&#xff09; 确认即可。

【制品】通用制品参库

制品仓库 制品库顾名思义是制品的仓库&#xff0c;制品是软件交付的成果性产物&#xff0c;通常是可运行的二进制形式&#xff0c;因此制品库通常也被称之为二进制制品仓库。制品库在开发阶段为使用各种开发语言的微服务开发者提供依赖解析的唯一入口。在构建阶段为各种语言的…

MongoDB远程复制集集群((两台服务器,8个实例))

第三阶段基础 时 间&#xff1a;2023年7月4日 参加人&#xff1a;全班人员 内 容&#xff1a; MongoDB远程复制集集群 目录 MongoDB远程复制集集群 实验环境&#xff1a;&#xff08;两台服务器&#xff0c;8个实例&#xff09; 环境部署&#xff1a; 安装部署 实 …

零基础自学网络安全,就是这样简单!

建议一&#xff1a;黑客七个等级 黑客&#xff0c;对很多人来说充满诱惑力。很多人可以发现这门领域如同任何一门领域&#xff0c;越深入越敬畏&#xff0c;知识如海洋&#xff0c;黑客也存在一些等级&#xff0c;参考知道创宇 CEO ic&#xff08;世界顶级黑客团队 0x557 成员…

Diffusers学习总结

Diffusers代码&#xff1a;https://github.com/huggingface/diffusers Diffusers使用指南&#xff1a;https://huggingface.co/docs/diffusers/index Diffusers前向加速技巧&#xff1a; float16前向推理

微信小程序申请 wx.getLocation 接口 审核一直不通过

项目需要通过微信的 getLocation 获取本地的位置信息&#xff08;经纬度&#xff09;&#xff0c;但是提交很多次审核都不通过&#xff0c;最后通过写了个项目里用不到的 导航功能 截图录屏才通过了审核。 以下申请文案及配图仅供参考&#xff1a; 因当前业务涉及就近医院挂号…

JointVAE用于单细胞多模态插补和embedding

单细胞多模态数据能够测量细胞的各种特征&#xff0c;从而深入了解细胞和分子机制。然而&#xff0c;多模态数据的生成仍然昂贵且具有挑战性&#xff0c;同时缺失模态也经常发生。最近&#xff0c;机器学习方法已经被开发用于数据补全&#xff0c;但通常需要完全匹配的多模态数…

【剑指 Offer】52. 两个链表的第一个公共节点。 难度等级:简答 -- 中等。双指针法太秀了

文章目录 1. 题目2. 我的解法&#xff1a;哈希表&#xff0c;空间复杂度 0(n)&#xff0c;不符合要求2.1 算法思路2.2 code 3. 双指针法&#xff1a;浪漫相遇太秀了3.1 算法思路3.2 code 1. 题目 题目链接&#xff1a;剑指 Offer 52. 两个链表的第一个公共节点 输入两个链表&…