• 多模块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包放到腾讯云服务器上运行了。。。

  • 相关阅读:
    任务栏恢复添加快捷方式(即桌快出现箭头)
    去除桌面快捷方式小箭头
    PHP Warning: date() [function.date]: It is not safe to rely on the system's timezone 转
    坑爹的 mysql error 2003!
    浅谈nvm环境搭建与利用nvm安装nodejs
    本地SVN服务器的搭建(WINDOWS环境)
    DevExpress学习之Gridcontrol
    string 和 StringBuilder 的简单理解!
    关注,被关注!
    C# Using 用法
  • 原文地址:https://www.cnblogs.com/xiaoming0601/p/11077491.html
Copyright © 2020-2023  润新知