当前位置:主页 > 查看内容

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

发布时间:2021-06-07 00:00| 位朋友查看

简介:【问题描述】 以往部署springbootjsp项目时都是打一个war包直接启动就ok了。 昨天突然想尝试一下打jar包部署结果发现正常启动后无法访问到静态资源控制台也没有报错。 【问题原因】 使用Maven将Spring Boot项目打jar包时默认是不会将存放jsp及其他静态资源的……

【问题描述】

以往部署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,测试资源是不部署的

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

;原文链接:https://blog.csdn.net/Sentimentist/article/details/115573040
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐