1.情景展示

springboot项目整合jsp后,只要是访问跳转页面的请求,全部都报404。

springboot整合jsp,页面全报404_tomcat

2.具体分析

2022年2月25日11:43:38

最简单的测试方式:
将项目打成war包,放到tomcat的webapps目录下,启动tomcat,通过浏览器访问相关页面或请求;

如果能够正常访问,说明不是项目的问题而是idea的问题;

如果不能正常访问,说明是项目的问题。


以下是老的排查流程,如果你觉得将项目放到tomcat下太麻烦,也可以按照下面流程进行排查或者直接按照解决方案来。

我的项目目录结构如下:

springboot整合jsp,页面全报404_ide_02

页面直接放在了webapp目录下,由于我并没有把它放在WEB-INF目录下,所以,在没有添加拦截器的情况下,是可以直接访问到jsp页面的。

如果你的页面在WEB-INF下,是无法直接访问页面的,所以,为了测试,你可以先找一个简单的页面直接放到webapp目录下。

这样,在正常情况下,我们可以不通过控制层就能访问到页面。

404.jsp的访问路径为:jsp/404.jsp

springboot整合jsp,页面全报404_ide_03

如果到这一步,你能正常访问得到的话,就说明你之前页面的项目路径存在问题;

其实,不仅仅是jsp无法访问,html文件也无法访问得到:

springboot整合jsp,页面全报404_spring_04

只要是存放在webapp目录下的所有文件,都无法访问得到。

这说明:不是项目的问题,而是idea开发工具的问题!

3.解决方案

出现这个问题,往往是多模块项目。

通过idea创建多个module的项目,配置启动的application需要将module指向其所在的工作目录。(如果指定的是父目录,默认加载第一个module的配置)

点击springboot的启动类,选择“Edit Configurations...”;

springboot整合jsp,页面全报404_tomcat_05

展开“Environment”,找到“Working directory”,点击右侧的文件夹目录;

springboot整合jsp,页面全报404_spring_06

由于我的springboot启动类在bill-web下,所以将其工作目录设置成它;

springboot整合jsp,页面全报404_ide_07

insert-->Apply-->OK。

springboot整合jsp,页面全报404_SpringBoot_08

重启项目就能正常访问啦。

4.效果展示

现在,控制层请求可以正常转发到页面上啦。

springboot整合jsp,页面全报404_spring_09

单独访问jsp页面。

springboot整合jsp,页面全报404_ide_10

再来看看这个

springboot整合jsp,页面全报404_tomcat_11

看路径有什么区别?

webapp这个目录,可有可无,不管你加不加,都能正常访问得到,这是为啥?

我们知道:纯正的javaWebMaven项目,在最终打包的时候,会把webapp目录给去掉,这也就是:为什么我们访问的时候不需要加/webapp/这一层的原因(与本文无关)。

真正的原因是:idea自动将web资源的目录完成了映射。

springboot整合jsp,页面全报404_spring_12

那为啥webapp目录也能访问?

因为springboot内置tomcat启动的,可能对于内置tomcat而言,它就是一个普通的文件夹目录吧(猜的)。

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!


作者:Marydon