spring-mvc - springmvc关于redirect路径的问题

查看:125
本文介绍了spring-mvc - springmvc关于redirect路径的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

今天在做springmvc项目重定向测试时,发现一个问题,就是利用redirect和forward进行重定向和转发的问题。
首先理论知识:

redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL;
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址】

redirect是直接进行重定向,我先返回 【"redirect:/index.jsp";  】结果成功了,返回到了index页面上面,于是我想能不能不返回根目录下的index.jsp,于是有了【redirect:/WEB-INF/view/redirectview.jsp】这次竟然给我报了一个404错误,地址栏显示地址为【http://localhost:8080/springm...】,对应的目录下也确实有这个文件,后来我以为是因为无法解析jsp的问题,换成了html也是不行。后来我又把它修改成【redirect:/RequestMappingTest/TestViews】,这是一个controller的requestMapping映射的路径,这次竟然通过了,进入到了这个requestMapping路径映射的方法,并且成功的返回到了页面,此时的地址栏为【http://localhost:8080/springm...】。
如果说浏览器重新去请求那个地址,自然而然的应该是controller的requestMapping路径是正确的,但是为什么index.jsp也是成功的。而且而且为什么返回到根目录下的index.jsp 就可以成功,而其他的页面就不行,

--------------------------------------分割线-----下面是测试forward可以不看-----------------------------------------------------
然后我又利用了forward进行试验,上面理论知识说服务器直接访问目标地址的URL,然后我让返回【forward:/WEB-INF/view/forwardview.jsp】,结果页面成功的跳转到了这个目录下的这个forwardview.jsp页面,发现浏览器地址变成了【http://localhost:8080/springm...】,然后我又返回【forward:/RequestMappingTest/TestViews】这种类型requestMapping的映射路径,页面跳转到对应的方法,且返回正确的路径地址,而且浏览器的地址还是【http://localhost:8080/springm...】形式,说明上面的对于forward解释是正确的。

解决方案

你还没有理解HTTP协议,手机打字不方便,长话短说。
HTTP请求报文中的路径和你的项目中的路径毫无关系,redirect是HTTP的的一个响应报文Location的实现,当获取这个报文时,浏览器就会试图请求该URL所对应的地址,这个地址不存在,那么自然无法访问。forword和HTTP协议没啥关系,顺便说一下,web info下的文件是无法被直接访问的,你应该使用SprinfMVC的映射机制来设置可以访问到此jsp文件才行。

这篇关于spring-mvc - springmvc关于redirect路径的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆