SpringMVC学习笔记9-----重定向redirect和装发forward

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38016931/article/details/81783793

这个其实挺简单的,代码实现没遇见过bug,但有些细节还是值得一写的,怕自己记不住!

1.关于SpringMVC的重定向

      之前的所有控制器方法中返回的字符串都是当做逻辑视图名处理,如果使用重定向(转发),在返回的字符串前面添加个“redirect:”(forward:)将会被进行特殊处理,前面的redirect:被当做指示符,后面的字符串被当做url处理。

2.重定向与转发的区别

参考

这也算是老生常谈的事了,具体的区别有人比喻为:

重定向:你发证明给A部门盖章,A部门说盖不了要到B部门改,然后发回证明你又去B部门盖章!

转发:你发证明给A部门盖章,A部门说盖不了要到B部门盖,直接把本子发给B部门盖章!

很好理解,这两个过程被归纳为转发发1个请求,而重定向发2个请求!

转发过程:客户端发送请求-->web服务器接受请求-->调用内部方法完成请求的处理与转发-->将目标资源发送发到客户,这里,转发的路径必须是同一个web容器下的url,不能转向其他路径上去,传递的是自己容器内的request。在网页地址栏显示的仍然是第一次请求的路径吗,也就是说客户是感觉不到服务器是做了转发的,即只有一次请求!

重定向过程:客户浏览器发送http请求-->web服务器接受后发送302状态码响应及对应新的location给客户浏览器-->客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址-->服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

3.代码实现

很简单,写简单点!

添加控制方法,访问自己:

    @RequestMapping(value = "/testRedirect")
    public String testRedirect() {
        System.out.println("重定向");
        return "redirect:/index.jsp";
    }  
<a href="/testRedirect">测试重定向(转发)</a>

点击超链接(id:null忽略)

4.源码解析与相关理解

照样ctrl点击InternalResouceViewResolver,然后再点击其继承的父类,

找到creatView方法:

紫色的常量在类中的定义如下所示:

public static final String REDIRECT_URL_PREFIX = "redirect:";
public static final String FORWARD_URL_PREFIX = "forward:";

可以看到两个if语句检测是否startsWith()某个命令!

然后再将其封装成redirectView或者是InternalResourceView。然后进行相应的处理!

具体原理后面再添加

猜你喜欢

转载自blog.csdn.net/qq_38016931/article/details/81783793