关于部署springboot+jsp项目时打jar包无法访问静态资源的问题

本文介绍了在尝试将SpringBoot+jsp项目打包为jar时遇到的无法访问静态资源的问题。问题源于jar包默认不包含静态资源。通过分析jar和war包的区别,提出了解决方案,即在pom.xml的build部分添加特定资源配置,以确保静态资源被打入jar包。添加配置包括directory、targetPath、includes和excludes等,确保资源正确包含并过滤。采用这种方法后,启动项目能成功访问静态资源。

【问题描述】

以往部署springboot+jsp项目时都是打一个war包,直接启动就ok了。
昨天突然想尝试一下打jar包部署,结果发现正常启动后,无法访问到静态资源,控制台也没有报错。

【问题原因】

使用Maven将Spring Boot项目打jar包时,默认是不会将存放jsp及其他静态资源的webapps文件夹的内容打包的。

在这里顺便总结一下jar包和war包的知识点:

  • jar包:java类的归档文件。jar包不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。jar包的com里放的是.class文件、配置文件,但默认是没有静态资源的。jar包中可以包含META-INF 目录,用于存储包和扩展的配置数据,如安全性和版本信息,同时也可以用于存储静态资源。
  • war包:一个web应用,可以直接运行的web模块,部署到容器(tomcat)中启动。war包中包括.class文件、配置文件、静态资源(html、jsp)等等。一个war包可以理解为是一个web项目,里面是项目的所有东西,和项目的文件结构保持一致。

【问题解决】

由于Spring Boot 集成了tomcat,所以无论是jar包还是war包都可以直接启动。要把静态资源也打入jar包的话,则需要在pom.xml的build中添加如下配置

<resources>
<resource>
<!-- 指定resources插件处理哪个目录下的资源文件 -->
<directory>${basedir}/src/main/webapp</directory>
<!-- 需要将资源文件放到该目录下才能访问 -->
<targetPath>META-INF/resources</targetPath>
<includes>
<include>**/**</include>
</includes>
</resource>
<resource>
<directory>${basedir}/src/main/resources</directory>
</resource>
</resources>
其中配置项意义如下:
  • directory:指定属性文件的目录,build的过程需要找到它,并且将其放到targetPath下,默认的directory是${basedir}/src/main/resources
  • targetPath:指定build资源到哪个目录,默认是base directory
  • includes:指定包含文件的patterns,符合样式并且在directory目录下的文件将会包含进project的资源文件。
另外还有一些其他的配置项:
  • excludes:指定不包含在内的patterns,如果inclues与excludes有冲突,那么excludes胜利,那些符合冲突的样式的文件是不会包含进来的。
  • filtering:指定是否将filter文件(即build下的filters里定义的*.property文件)的变量值在这个resource文件有效,例如上面就指定那些变量值configuration文件无效
  • testResources:这个模块包含测试资源元素,其内容定义与resources类似,不同的一点是默认的测试资源路径是${basedir}/src/test/resources,测试资源是不部署的

这样的话启动后能够正常访问静态资源了,问题得到了解决。

参考链接:
解决Springboot打成jar包后,无法访问Jsp和静态文件问题
jar包和war包的介绍和区别
maven ,Pom.xml中build下的resources

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值