1.情景展示
springboot项目整合jsp后,只要是访问跳转页面的请求,全部都报404。
2.具体分析
2022年2月25日11:43:38
最简单的测试方式:
将项目打成war包,放到tomcat的webapps目录下,启动tomcat,通过浏览器访问相关页面或请求;
如果能够正常访问,说明不是项目的问题而是idea的问题;
如果不能正常访问,说明是项目的问题。
以下是老的排查流程,如果你觉得将项目放到tomcat下太麻烦,也可以按照下面流程进行排查或者直接按照解决方案来。
我的项目目录结构如下:
页面直接放在了webapp目录下,由于我并没有把它放在WEB-INF目录下,所以,在没有添加拦截器的情况下,是可以直接访问到jsp页面的。
如果你的页面在WEB-INF下,是无法直接访问页面的,所以,为了测试,你可以先找一个简单的页面直接放到webapp目录下。
这样,在正常情况下,我们可以不通过控制层就能访问到页面。
404.jsp的访问路径为:jsp/404.jsp
如果到这一步,你能正常访问得到的话,就说明你之前页面的项目路径存在问题;
其实,不仅仅是jsp无法访问,html文件也无法访问得到:
只要是存放在webapp目录下的所有文件,都无法访问得到。
这说明:不是项目的问题,而是idea开发工具的问题!
3.解决方案
出现这个问题,往往是多模块项目。
通过idea创建多个module的项目,配置启动的application需要将module指向其所在的工作目录。(如果指定的是父目录,默认加载第一个module的配置)
点击springboot的启动类,选择“Edit Configurations...”;
展开“Environment”,找到“Working directory”,点击右侧的文件夹目录;
由于我的springboot启动类在bill-web下,所以将其工作目录设置成它;
insert-->Apply-->OK。
重启项目就能正常访问啦。
4.效果展示
现在,控制层请求可以正常转发到页面上啦。
单独访问jsp页面。
再来看看这个
看路径有什么区别?
webapp这个目录,可有可无,不管你加不加,都能正常访问得到,这是为啥?
我们知道:纯正的javaWebMaven项目,在最终打包的时候,会把webapp目录给去掉,这也就是:为什么我们访问的时候不需要加/webapp/这一层的原因(与本文无关)。
真正的原因是:idea自动将web资源的目录完成了映射。
那为啥webapp目录也能访问?
因为springboot内置tomcat启动的,可能对于内置tomcat而言,它就是一个普通的文件夹目录吧(猜的)。
写在最后
哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!
作者:Marydon