多模块springboot项目启动访问不了jsp页面
被springboot项目maven打包、启动、访问折腾的头都大了,一步一个坑,在解决了所有的问题之后,那种欣喜若狂的心情只有自己能体会,决定要好好记录一下了,废话不多说了,直接进入正题。
问题和排查流程:
为了扩展和规范,搭建的springboot项目是一个多模块项目,于是,问题来了,下面一个个说:
1.项目搭建完成后,application.yml文件配置了mvc视图解析器,写了一个controller测试,发现能进controller方法,但是死活输出不了页面,浏览器报错如下:

上网查了很多资料,有些说springboot整合jsp要通过spring-boot:run方式启动,具体可以参考:https://segmentfault.com/a/1190000009785247
后来我又重新搭建了一个简单的springboot工程(注意:这一次不是多模块项目),通过main方法启动,却又能正常跳转jsp页面,我....
2.看来是多模块工程非得通过spring-boot:run启动,具体原因待有缘人补充,这时候我尝试通过spring-boot:run启动,但是打开maven结构图,发现Plugins下并没有spring-boot插件,原来是因为pom.xml中没有配置spring-boot插件导致的,兴致匆匆的配置了spring-boot plugins,很开心,maven结构图出现了亮眼的spring-boot插件


3.然而一切并没有那么顺利,当我执行mvn -package时,居然报错很多类找不到,我....,我就多添加了一个plugin而已啊,有必要这么折磨我么,后来参考网上的文章,添加了<classifier>exec</classifier>这么一个配置,如下:

赶紧试了一把,好了,这次package终于没报错了,然后我就匆忙点击spring-boot:run准备启动项目了,然鹅....
4.启动报错,提示我没有配置mainClass,原来是因为项目中含有main方法的class有点多,springboot有点蒙圈不知道找哪一个,于是在plugin中又加了一个配置<mainClass>com.mmz.WebApplication</mainClass>,指定了主类

5.然鹅,还是有问题,启动仍然报错,只不过这次报错不一样了,报classNotFundException,找不到我配置的WebApplication类。。。我很难受呀

6.查资料啊查资料,网上并没有相关文章,后来又怀疑是多模块项目惹的祸,重新用简单的项目试验了一把,结果简单的项目就好好地运行并没有报错,于是仔细检查了一下两个项目的配置,发现启动简单工程时,启动的本身就是web模块,而我启动多模块工程时,运行的是root模块下面的spring-boot插件,怀疑跟这个有关,于是尝试启动了web模块下面的spring-boot:run,妈呀,终于启动成功,并且能正常访问页面了,这一刻把我激动的。。。

7.你以为这样就可以了吗??下午试了一把把项目打包成jar的方式,运行java -jar xxx.jar方式启动,启动成功,但是仍然没法访问jsp页面,解压jar包发现根本没有把webapp目录以及其目录下的jsp页面打包进去,因为springboot插件打包默认不会打包自己添加的webapp目录,于是需要在pom.xml下的build标签里指定maven 打包目录如下:

这时候重新打包成jar解压,发现打包进了对应的目录下,赶紧访问页面试了一把,结果......嗯,还是不可以,报了同样的错误...

8.查阅资料,最后一步还需要指定spring-boot-maven-plugin的版本为1.4.2.RELEASE,其他版本都不行,据说是springboot的一个bug,于是添加了version后,再试了一把终于可以了。。至此,一个完成的spriongboot+maven,打包+启动终于完整了。最终配置如下:
<build>
<resources>
<!-- 打包时将jsp文件拷贝到META-INF目录下-->
<resource>
<!-- 指定resources插件处理哪个目录下的资源文件 -->
<directory>src/main/webapp</directory>
<!--注意此次必须要放在此目录下才能被访问到-->
<targetPath>META-INF/resources</targetPath>
<includes>
<include>**/**</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/**</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.4.2.RELEASE</version>
<configuration>
<mainClass>com.mmz.WebApplication</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
nice,接下来就是把自己的项目打好jar包放到腾讯云服务器上运行了。。。
多模块springboot项目启动访问不了jsp页面的更多相关文章
- springBoot项目启动类启动无法访问
springBoot项目启动类启动无法访问. 网上也查了一些资料,我这里总结.下不来虚的,也不废话. 解决办法: 1.若是maven项目,则找到右边Maven Projects --->Plug ...
- springboot项目启动无法访问到controller原因之一:引导类位置有问题
新建的springboot项目启动后,无法访问到controller 页面是404错误 查看项目结构,发现是新建工程的启动类位置有问题,controller类应该位于引导类的同级包或者子级包中.需要将 ...
- 使用Gradle构建多模块SpringBoot项目
使用Gradle构建多模块SpringBoot项目 本项目使用Gradle构建SpringBoot项目,将不同的业务进行不同的模块划分(不做微服务与分布式架构); - 编辑器:Intellij IDE ...
- Springboot 项目启动后执行某些自定义代码
Springboot 项目启动后执行某些自定义代码 Springboot给我们提供了两种"开机启动"某些方法的方式:ApplicationRunner和CommandLineRun ...
- SpringBoot项目启动时链接数据库很慢
SpringBoot项目启动时链接数据库很慢 springboot项目在启动时候,如下图所示,链接数据库很慢 解决方法:在mysql 的配置文件中 配置 skip-name-resolve
- springboot项目启动成功后执行一段代码的两种方式
springboot项目启动成功后执行一段代码的两种方式 实现ApplicationRunner接口 package com.lnjecit.lifecycle; import org.springf ...
- springboot项目启动之后初始化自定义配置类
前言 今天在写项目的时候,需要再springboot项目启动之后,加载我自定义的配置类的一些方法,百度了之后特此记录下. 正文 方法有两种: 1. 创建自定义类实现 CommandLineRunner ...
- 【log4j】springboot项目启动 ,使用的druid数据源,log4j报错 log4j:WARN Please initialize the log4j system properly.
springboot项目启动 ,使用的druid数据源,log4j报错 -- :: --- [ restartedMain] o.hibernate.annotations.common.Versio ...
- Springboot项目启动不了。也不打印任何日志信息。
Springboot项目启动不了.也不打印任何日志信息. <!-- 在创建Spring Boot工程时,我们引入了spring-boot-starter,其中包含了spring-boot-sta ...
随机推荐
- 《Web Development with Go》JWT认证
时间晚了,先来一版调通的JWT普通认证, 明天再弄一个通过中间件,及gorilla,negroni库的认证, 这样正规些, 但认证通过之后,如何对应权限? 由于jwt-go从2升到3,还有rsa 10 ...
- Java中dimension类详解
Java中dimension类详解 https://blog.csdn.net/hrw1234567890/article/details/81217788
- acwing 850. Dijkstra求最短路 II 模板
地址 https://www.acwing.com/problem/content/description/852/ 给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为非负值. 请你求 ...
- C语言程序设计100例之(16):巧解算式
例16 巧解算式 问题描述 在1.2.3.4.5.6.7.8.9.10个数中间加上加号或减号,使得到的表达式的值为自然数N,如果中间没有符号,则认为前后为一个数,如1 2 3认为是一百二十三(123 ...
- Vue小练习 03
""" 1.有以下广告数据(实际数据命名可以略做调整) ad_data = { tv: [ {img: 'img/tv/tv1.jpg', title: 'tv1'}, ...
- Linux下shell脚本实现mongodb定时自动备份
MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功 ...
- python访问kafka
操作系统 : CentOS7.3.1611_x64 Python 版本 : 3.6.8 kafka 版本 : 2.3.1 本文记录python访问kafka的简单使用,是入门教程,高阶读者请直接忽略. ...
- SpringCloud的入门学习之概念理解、Zuul路由网关
1.Zuul路由网关是什么? 答:Zuul包含了对请求的路由和过滤两个最主要的功能,其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础而过滤器功能则负责对请求的处理过程进 ...
- Web前端基础(17):jQuery基础(四)
1. jQuery的属性操作 jquery的属性操作模块分为四个部分:html属性操作,dom属性操作,类样式操作和值操作 html属性操作:是对html文档中的属性进行读取,设置和移除操作.比如at ...
- 松软科技带你学前端:JavaScript 输出
JavaScript 不提供任何内建的打印或显示函数. JavaScript 显示方案 JavaScript 能够以不同方式“显示”数据: 使用 window.alert() 写入警告框 使用 doc ...