面试官问:"Spring MVC怎么样设定重定向和转发的?"

答:

一般情况下,控制器方法返回字符串类型的值会被当成逻辑视图名处理。

如果返回的字符串中带 forward: 或 redirect: 前缀时,SpringMVC 会对他们进行特殊处理:

将 forward: 或redirect: 当成指示符,其后的字符串作为 URL 来处理。

(1)转发:在返回值前面加"forward:",譬如"forward:user.do?name=method4"

(2)重定向:在返回值前面加"redirect:",譬如"redirect:http://www.baidu.com"

@RequestMapping("/springMvc")
@Controller
public class handler {
    //测试重定向
    @RequestMapping("/testRedirect")
    public String testRedirect(){
        System.out.println("testRedirect");
        return "redirect:/index.jsp";
    }
 
}
@RequestMapping("/springMvc")
@Controller
public class handler {
    //测试转发
    @RequestMapping("/testRedirect")
    public String testRedirect(){
        System.out.println("testRedirect");
        return "forward:/index.jsp";
    }
 
}

题外:

转发与重定向的区别

  1. 地址栏
    转发:不变,不会显示出转向的地址
    重定向:会显示转向之后的地址

  2. 请求
    转发:一次请求
    重定向:至少提交了两次请求

  3. 数据
    转发:对request对象的信息不会丢失,因此可以在多个页面交互过程中实现请求数据的共享
    重定向:request信息将丢失

  4. 原理

    ​ 转发:是在服务器内部控制权的转移,是由服务器区请求,客户端并不知道是怎样转移的,因此客户端浏览器的地址不会显示出转向的地址。
    ​ 重定向:是服务器告诉了客户端要转向哪个地址,客户端再自己去请求转向的地址,因此会显示转向后的地址,也可以理解浏览器至少进行了两次的访问请求。

转发和重定向的流程

重定向的流程:

​ 浏览器发送请求->服务器运行->相应请求------->,返回给浏览器一个新的地址与响应码,浏览器进行判断为重定向,自动发送一个新的请求给服务器,请求地址为刚刚服务器发送给浏览器的地址。->服务器运行->相应请求

转发的流程:

​ 发送请求 -->服务器运行–>进行请求的重新设置,例如通过request.setAttribute(name,value)–>根据转发的地址,获取该地址的网页–>响应请求给浏览器

转载自:https://blog.csdn.net/ABCQHC/article/details/106675303

posted @ 2020-11-08 16:54  yu10001  阅读(625)  评论(0编辑  收藏  举报