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

news/2024/7/5 3:50:18

问题描述

项目在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://lihuaxi.xjx100.cn/news/1313847.html

相关文章

百科词条创建:百科创建词条的规则及具体步骤!

百科词条是指对某一特定的事物、人物、事件、概念等进行全面、系统、准确的描述和介绍,以便人们获取相关信息和知识。随着互联网的普及和发展,百科词条成为了人们获取信息和知识的重要途径之一,因此如何正确地创建百科词条,成为了…

银河麒麟服务器v10 sp1 nginx开机自动启动

接上一篇:银河麒麟服务器v10 sp1 安装 nginx_csdn_aspnet的博客-CSDN博客 设置开机自启动 定义服务启动文件内容: [Unit] Descriptionnginx - high performance web server Afternetwork.target remote-fs.target nss-lookup.target [Service] Ty…

libbpf 开发指南:打开一个已经固定在文件系统路径上的 eBPF 程序的链接

目录 函数原型与解释 代码demo makefile cmake 期望输出 函数原型与解释 LIBBPF_API struct bpf_link * bpf_link__open(const char *path); 参数说明: path:一个字符串,表示已固定 eBPF 程序的文件系统路径。 返回值:一个…

不同语言的连接符(JavaScript、PHP、Java、C语言、C语言、Python、C#、Ruby、Swift、Go、Rust、C++、MATLAB)

JavaScript JavaScript 使用加号 () 运算符来连接字符串。 var str1 "Hello"; var str2 "World"; var result str1 " " str2; console.log(result); // 输出:Hello WorldPHP PHP 使用点号 (.) 运算符来连接字符串。 $str1 …

宝塔安装Jenkins-图文小白教程

一、Jenkins包下载 大家可以从Jenkins官网(https://www.jenkins.io/)根据自己的需要下载最新的版本。 但Jenkins官网下载较慢,容易造成下载失败。可以去国内的开源镜像网站下载Jenkins最新版本。目前博主使用的是清华大学的开源镜像网站&…

安装和配置nginx(含https)

文章目录 安装Nginx配置单独的配置:https配置 nginx为什么可以处理高并发 安装Nginx sudo yum update sudo yum install epel-release sudo yum install nginx sudo systemctl start nginx安装好后可以打开自己的域名 看一下默认的页面 配置 具体参考Link 位置 …

【基础算法】贪心算法

贪心算法又称贪婪算法,是一种常见的算法思想。贪心算法的优点是效率高,实现较为简单,缺点是可能得不到最优解。 贪心算法的基本思想 贪心算法就是在求解问题时,总是做出当前看来最好的选择。也就是说贪心算法并不从整体最优上考…

伪类元素content,icon变形倾斜问题

![在这里插入图片描述](https://img-blog.csdnimg.cn/b58d128a80fd4a069a5e47cf2e87e256.png 检查发现原本设置了一个 font-style 为 italic,为倾斜样式 解决办法: font-style: normal;