404 在我们搭建项目时是比较常见的问题,一般都是路径错误,或者路径找不到的原因。
只是有的比较常见,而有的则是隐式的出现,今天遇到的这个问题就属于是隐式的。
在 SpringMVC 中与跳转页面相关的是在 Controller 层,所以在 SpringMVC 中遇到这类问题应该从 Controller 层下手。
今天在实现 Login 功能的时候,成功则跳转到一个新的页面,又不需要传递信息,当然首选 重定向(redirect) 呀,结果是遇到了可爱的 404,这时,比 404 更巧妙的我灵机一动,选择用 请求转发试试(Controller 默认是请求转发),结果就是跳转成功啦!
请求转发: 跳转成功
重定向:跳转失败:
为什么呢?而且更奇葩的是在 idea 中 按住 Ctrl + 鼠标点击可以实现页面的跳转,但是无论如何就是 404,我的天啊!!!
原因:经过不放弃的寻求,终于知道了其中的猫腻,究其本质,还是请求转发和重定向的区别,如果不理解这一点的小伙伴,一定要好好的去看一下,重定向是二次请求(这次真的是幡然醒悟),而 SpringMVC在我们每次请求时都会去寻找对应的 Controller,也就是分发器去找对应的 RequestMapping。
回看这个问题,重定向的时候相当于是再次请求,这时候就会去寻找对应的 RequestMapping(“teacher/teacherIndex”),但是在我们的项目中根本找不到这个 Controller,所以 404 啦(终于想通了,希望正在看的你也能理解),怎么解决呢,写一个对应的Controller 就可以啦。
总结:
其本质是 重定向与 SpringMVC 中前端控制器的结合使用,在实战中才能真正理解 请求转发和重定向的具体使用,万变不离其宗,希望你也能搞定 404,加油,少年!有帮助的同时点点小赞哦!