说说 Spring MVC 中 forward 与 redirect 之间的区别

forward(转发) 与 redirect(重定向) 是 servlet 提供的两种跳转方式。这两种跳转方式的具体区别如下表所述:

forward redirect
地址栏 forword是服务器内部的重定向,即服务器直接访问目标地址的 url,并把其中的内容作为响应结果返回给浏览器,所以浏览器的地址栏不会发生变化。 服务器发送给浏览器一个 302 状态码,让其请求新的地址,所以地址栏中的地址会显示为新的地址。
共享数据 由于在服务器内部重定向的过程中,用的是同一个request,因此这个 request 可以带给其它 servlet 中供其使用,即共享数据。 不能
应用场景 一般用于用户登录时,根据角色权限跳转到相应模块 一般用于用户注销登录时,返回主页面或跳转到其他网站
效率
本质 服务器行为 客户端行为
请求次数 1次 2次。比如客户端请求 A 地址,服务端让其重定向到 B 地址,客户端请求 B 地址。

重定向在 Controller 的方法中,返回值加入 redirect: 前缀,参见下面的这个示例:

    @GetMapping("/toShow")
    public String toShow(Model model) {
        return "redirect:/product/show";
    }

在浏览器的调试模式下,可以看到重定向实际有两次请求:

服务端通过返回状态码 302,告知客户端需要重定向。

猜你喜欢

转载自blog.csdn.net/deniro_li/article/details/108308513