idea+Maven+SpringBoot+jsp所有真正的坑点总结

本人在学习SpringBoot的时候,想测试前端。由于jsp使用比较广泛,想继续用jsp处理前端,因此也没有考虑用SpringBoot自己的专属模板thymeleaf等。但是SpringBoot对与jsp很不友好,很多小白在配置的时候都出现很多问题,一般是:
This application has no explicit mapping for /error, so you are seeing this as a fallback.(404错误)

如何配置jsp,网上都基本一致:在main文件夹中创建这样一个目录:/webapp/WEB-INF/jsp(名字无所谓,先按这个标准来吧)。然后在jsp文件夹中存放自己的.jsp文件。(后面我会附上我的文件目录结构)

我在启动调试的时候也遇到“404”这个问题,为解决这个问题花了一天时间(大佬们别笑),把我折磨死了。网上有很多解决办法,但有的真药,有的是假药。现在盘点我测试过的“真坑”。

坑点一:要在项目pom文件中导入依赖关系:
idea+Maven+SpringBoot+jsp所有真正的坑点总结
这是网上的一种解决方案,但是我试了不行,经过查证,应该注释掉tomcat-embed-jasper下面的provided,而且javax.servlet这个依赖有没有都可以,我试过了。从简洁的角度出发,最后只用导入:
idea+Maven+SpringBoot+jsp所有真正的坑点总结
这个依赖关系即可。

坑点二:在application.properties中进行以下设置:
idea+Maven+SpringBoot+jsp所有真正的坑点总结
这里有个版本问题,如果你的pom文件里面 spring-boot-starter-parent 的版本低于1.5,就用下面注释的那两条,否则用上面的。不要在意”=”后面是否有空格或者是否把”=”改成”:”, 都一样,这不是坑点。

坑点三:也是解决我自己问题的关键坑点所在,发现这个问题后我真的是无语了。这跟我的项目结构有关,我的项目是多模块结构,当初学Maven的时候,看到有多模块结构的教学,感觉这种项目结构比较合理。就一直用这种方法创建项目,养成好的习惯。其实就是在Maven项目中添加多个Module,本项目中我就是在Maven项目中再添加一个SpringBoot的模块,通过Maven父项目管理这些子项目。就是因为这个,把自己带入了坑中。项目它默认工作目录是Maven父项的工作路径,jsp文件是放在子项目SpringBoot中的,因此运行启动类时候找不到jsp资源。怎么解决呢:
idea+Maven+SpringBoot+jsp所有真正的坑点总结
在idea上面找到Run,点击找到Edit Configuration 点击打开;
idea+Maven+SpringBoot+jsp所有真正的坑点总结
然后吧启动类xxxApplication的工作路径改为MODULE_DIR,即可。

以上是我认为此问题(404)比较大的坑点。

现在盘点网上其他的一些方案:
方案一:启动类xxxApplication的位置放错了,xxxApplication文件的位置层次要高于或者等于Controller文件的层次。我自己尝试着吧启动类放在低于Controller文件层次的位置,并没有报错,一样可以运行。我不知道是不是版本兼容性的问题。

方案二:在启动类中继承SpringBootServletInitializer,然后重写configure方法,具体操作可以参考网上。这个也是要看你的SpringBoot版本,现在高版本都不用使用这种方法。

下面是我的文件目录结构:
idea+Maven+SpringBoot+jsp所有真正的坑点总结

以上全部解决方法仅限错误(404)No message available。如果有补充或者简异议的朋友,可以在下方留言,谢谢阅读。
idea+Maven+SpringBoot+jsp所有真正的坑点总结