900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 关于部署springboot+jsp项目时打jar包无法访问静态资源的问题

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

时间:2019-12-14 03:51:34

相关推荐

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

【问题描述】

以往部署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/resourcestargetPath:指定build资源到哪个目录,默认是base directoryincludes:指定包含文件的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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。