SpringMVC之转发和重定向
1.转发
服务器端的行为, 请求地址不发生改变, 由服务器向浏览器转发页面, 发送一次请求
-
方式一 : 在没有配置视图解析器时, 在返回值的前面加
/
后面跟具体的jsp页面路径注意 : 如果使用此方式时配置了视图解析器, 那么返回值的前面和后面将会被添加多余的前缀和后缀, 导致404错误
@GetMapping("/fr") public String fr(Model model){ model.addAttribute("msg","这是转发"); return "/WEB-INF/jsp/fr.jsp"; }
-
方法二 : 使用
forward
, 此时无论是否配置了视图解析器都可以实现转发功能,forward:
后跟具体的jsp页面路径@GetMapping("/fr") public String fr(Model model){ model.addAttribute("msg","这是转发"); return "forward:/WEB-INF/jsp/fr.jsp"; }
2.重定向 redirect
浏览器端的行为, 请求地址发生改变, 由服务器告知浏览器该发送什么请求, 发送请求大于一次
-
重定向到web目录下的jsp页面
注意 : web目录下的jsp页面可以直接访问, 也就是可以直接使用web目录下的jsp页面名作为请求发送, 但是web目录下子目录的内容不可以直接访问, 否则404错误
@GetMapping("/fr2") public String fr2(Model model){ model.addAttribute("msg2","这是重定向"); return "redirect:/index.jsp"; }
浏览器发送 fr2 请求, 服务器告诉浏览器该发送 index.jsp 请求, 浏览器再次发送 index.jsp 请求, 最后得到 web 目录下的 index.jsp 页面
-
重定向到别的请求
@GetMapping("/re") public String re(Model model){ model.addAttribute("xxx","这是重定向后的页面"); return "fr2"; } @GetMapping("/fr2") public String fr2(Model model){ model.addAttribute("msg2","这是重定向"); return "redirect:/re"; }
浏览器发送 fr2 请求, 服务器告诉浏览器该发送 re 请求, 浏览器再次发送 re 请求, 方法返回 fr2 字符串, 经视图解析器处理, 最后得到 fr2.jsp 页面