springboot+thymeleaf打包成jar后找不到静态资源的坑及解决

目录
  • 问题描述
  • 解决思路及最终解决步骤
  • springboot+thymeleaf打jar包后500

问题描述

使用的springboot开发项目,在开发阶段没有任何问题,然而在打成jar包准备进行测试发布时,出现

org.thymeleaf.exceptions.TemplateInputException:Error resolving template [login], template might not exist or might not be accessible by any of the configured Template Resolvers

首页都进不去。

网上逛了一圈,大多数都是说controller在return的时候去掉前面的斜杠,即:

@Controller("/index")
public String index(){
    return "/index";
    //把"/index" 变成"index"
    //如 return "index"
}

先不说这样并不可行,就算可以,上百个controller难道要一个一个改?果断放弃这条思路。

解决思路及最终解决步骤

从错误信息上看,很明显是找不到对应的html文件,先来看一下我的项目文件目录结构:

这里就要批评一下自己了,这个webapp是我自己加上的,你问我为什么?因为之前springMvc的结构就是这样的。。。。

这就是读书读一半的恶果了,同学们要引以为戒啊。

然后看一下yml文件的配置:

这里主要是配置springmvc支持的,手动加上前面的webapp目录,把静态资源往上一放,在yml再配置一下springmvc支持,项目运行起来那是一点问题都没有,假如后面项目打包成war包,一样可以完美运行。然而。。。。

当我打包成jar包后,完全没办法运行啊。。。。

然后我用winrar打开jar包,想看看我的文件都去哪了。。。。

这个是jar包打开最外层,再往下找,看看boot-inf里面有什么

我的静态资源文件去哪啦???

正常的目录结构应该是这样的(以tomcat为例):

这说明我的webapp下面的文件一个也没有编译进jar包里,能找到文件才怪了。。。

知道了问题所在,那剩下来的就是如何解决掉这个问题了

springboot有说明:所有的静态文件都应该放在static、templates或者resources下(我怎么好像记得是4个???)。

个人比较喜欢resources,所以就先新建了一个resources文件夹,然后把所有的资源文件都放到了resources文件夹下面:

文件移动过来后,再重新编译,然后再去找,终于找到了这些可爱的文件:

最后一步:配置springMvc的前后缀:

这里注意一下最后的斜杠不能少。

重新编译后,终于可以正常运行起来。

springboot+thymeleaf打jar包后500

最近一个项目的后台框架我选用的springboot+thymeleaf,项目在windows环境下用idae运行的一点问题都没有,可是为什么打jar包放在linux上就访问报错呢?

我仔细一看,controller层返回的路径manageLogin.html中的L我没有大写,果然改完就没问题了,那为什么在idae中没问题呢?原来是idea中忽略了大小写。

这么傻的错误,大概只有我会犯吧!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • SpringBoot无法访问/static下静态资源的解决

    SpringBoot无法访问/static下静态资源 SpringBoot 访问静态资源的规则 都在WebMvcAutoConfiguration自动配置类中 在该类下有对资源处理的方法 默认按照该加载顺序,加载静态资源文件,而我尝试了N次,浏览器无法访问资源:查看官网后,我又修改了默认的加载位置.如下: spring.resources.static-locations=/static/ 但是还是没有能如期访问! 而回过头再回过头看Web的自动配置类,我发现了一个被忽略的配置 在WebMvcC

  • springboot+thymeleaf找不到视图的解决方案

    springboot+thymeleaf找不到视图 情况: springboot + thymeleaf打成jar包后,报错,但在eclipse本地跑却可以: template might not exist or might not be accessible by any of the configured Template Resolvers yml配置: spring: thymeleaf: cache: false #开发时关闭缓存,不然没法看到实时页面 mode: HTML5 # 用

  • 浅析SpringBoot中使用thymeleaf找不到.HTML文件的原因

    thymeleaf是目前最新的模板引擎,它和springboot完美搭配,让前后端不在疏远 首先先介绍一下市面上出现过的模板引擎 1, Verlocity 距今有10多年之久,是由Apache推出的 Struts2 底层使用2,Freemarker,距今有10多年之久, 第三方小公司推出,后来得到了Apache的认可,在Struts2这个框架中, 底层使用Freemarker. SpringBoot 默认使用Freemarker是以.ftl结尾的文件. 3,Thymeleaf是以.html结尾的

  • 浅析SpringBoot2.4 静态资源加载问题

    标题index界面加载问题 刚开始学习springBoot记录一下遇到的小问题 1.index.html加载不出来的问题 我习惯性的将index.html放在public包下 而我使用了thymeleaf,它内置的视图解析器,屏蔽了springBoot的默认视图解析器,只会从templates包下读取视图资源,我将index.html拉到templates包下时就可以正常显示了 2.static包下静态资源加载不出来的问题 看了很多网上大多说的都是配置文件的问题,试了半天都不管用,静下心来从头整

  • springboot+thymeleaf打包成jar后找不到静态资源的坑及解决

    目录 问题描述 解决思路及最终解决步骤 springboot+thymeleaf打jar包后500 问题描述 使用的springboot开发项目,在开发阶段没有任何问题,然而在打成jar包准备进行测试发布时,出现 org.thymeleaf.exceptions.TemplateInputException:Error resolving template [login], template might not exist or might not be accessible by any of

  • 项目打包成jar后包无法读取src/main/resources下文件的解决

    目录 一.项目场景 二.问题描述 发现问题 分析问题 为什么使用 ClassPathResource 后, 可以找到打包后的文件路径? 三.解决方案 方案一 方案二 意外出现 总结 一.项目场景 在项目中读取文件时, 使用new File() 出现的一个坑以及解决流程这种问题不仅在本地文件读取时会遇到, 而且在下载项目下 (例如: src/main/resources目录下) 的文本时, 也会遇到, 二.问题描述 发现问题 原来代码该代码功能是利用 common.io 包下的FileUtils来

  • springboot项目打包成jar包的图文教程

    目录 一.为什么打包 二.如何打包 (1)使用IDEA进行打包 (2)使用maven进行打包 三.运行jar包 四.注意 一.为什么打包 项目开发完毕后会将前后端应用打包,然后部署到服务器上运行.Java Web应用在Spring Boot之前,通常是打包成war包,结合Tomcat来完成部署.而对于SpringBoot,官方的建议是将Spring Boot应用打包成一个fat jar(SpringBoot默认打包方式),即项目的依赖jar包也会被包含在Spring Boot项目的jar包当中,

  • IDEA 将 SpringBoot 项目打包成jar的方法

    新建SpringBoot项目:IDEA 创建 SpringBoot 项目 一.打包配置 1.File -> Project Structure 2.Project Structure 3.设置启动类及META-INF 根据 modules 创建 jar.如图所示,选择项目,入口类等.最后一项 META-INF 默认放到 src\main\java 目录里,如果使用默认值,没有进行其他配置,生成的 jar 有可能不会包含 META-INF 目录,导致运行 jar 出错,正确的是将 META-INF

  • springboot文件打包成jar或war的方法

    jar: pom.xml: <packaging>jar</packaging> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </b

  • 一文解决springboot打包成jar文件无法正常运行的问题

    1.用intellij idea 创建了一个springboot的项目,前期都运行的好好的,在ide中可以正常运行,但是打包成Jar运行却一直报错. 2.经过不懈探索,终于找到解决办法 3.首先,找到pom.xml,把下面的build块中的内容改成如下所示 <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-

  • Spring boot项目打包成jar运行的二种方法

    前言 最近公司有个项目需要移植到SpringBoot框架上,项目里面又有许多第三方jar包,在linux服务器上最方便的就是用jar的方式来运行SpringBoot项目了,因此我研究了2种打jar包的方式,记录如下,供大家参考: 1.通过maven插件,将所有依赖包都打包成一个jar包,然后通过java -jar xxx.jar方式运行 由于项目中有些jar包是第三方的,maven官方仓库没有,需要使用mvn install命令打包到本地,然后将其写入到pom.xml的依赖中,maven仓库有的

  • Android studio将Module打包成Jar的方法

    整理记录 AndroidStudio 把一个 module 项目打包成 jar 包. 一.默认自动生成的 jar 包 众所周知 android studio 会在library所依赖的 app运行 或 build 之后自动生成 jar 包,路径为 Module根目录/build/intermediates/bundles/debug or release/classes.jar,这样生成的jar是可以用的,但不是我们可以控制的,所以我们需要通过其他方式来解决这个问题. 注意: 若发现 Andro

  • 在idea中将java项目中的单个类打包成jar包操作

    JAR文件的全称是Java Archive File,即Java档案文件.JAR文件是一种压缩文件,与常见的ZIP压缩文件兼容,被称为JAR包. JAR文件与zip文件的主要区别是在JAR文件中默认包含了一个名为META-INF/MANIFEST.MF的清单文件,这个清单文件是在生成JAR文件时系统自动创建的. 打包jar包 1.先创建一个要打包成jar包的类 2.File -> Project Structrue -> Artifacts -> + -> JAR -> fr

  • java打包成jar并执行jar包中指定的main方法

    java打包成jar jar -cvf [jar包的名字] [需要打包的文件] 执行jar包中的main方法 java -jar ****.jar 执行后总是运行指定的主方法,如果 jar 中有多个 main 方法,那么如何运行指定的 main 方法呢? 用下面的命令试试看: java -classpath ****.jar ****.****.className [args] "****.****"表示"包名": "className"表示&q

随机推荐