SpringMVC--08 转发和重定向

Posted Moon&&Dragon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC--08 转发和重定向相关的知识,希望对你有一定的参考价值。

SpringMVC–08 转发和重定向

文章目录

10.1 转发

在SpringMVC中默认的就是转发,在我们使用ModelAndView或者是直接return字符串时,其实就是默认走的转发

我们也可以显式的访问路径的前面加上forward:,这样的方式也是会去走一个转发的

注意:

  • 我们如果使用默认的方式进行转发的话,我们的路径是会去拼接视图解析器的前缀和后缀。
  • 如果我们选择显式的完整的去进行使用转发,那么这时候视图解析器就不起作用了,我们需要在forward:后面添加完整的路径

默认的方式:

@PostMapping("/login")
public String login(AdminInfo adminInfo, Model model)
  if (!isExistAdmin(adminInfo))
    model.addAttribute("msg","用户名密码错误!");
    return "login";
  
  // 默认的情况会去帮助我们去拼接视图解析器,我们只需要返回文件名
  return "main";

完整的方式:

@PostMapping("/login")
public String login(AdminInfo adminInfo, Model model)
  if (!isExistAdmin(adminInfo))
    model.addAttribute("msg","用户名密码错误!");
    return "login";
  
  // 我们这里把forward写出来以后,视图解析器就不会去拼接了,我们需要直接去写完整的路径
  return "forward:/templates/main.ftl";

好处:

  • 这样做的其实是可以让我们可以去访问其他目录下的一些文件,避免了视图解析器只能访问前缀的指定目录

10.2 重定向

在SpringMVC中默认都是使用转发,但是当我们想使用重定向时怎么办呢,其实和上面转发的完整方式是一样的,这时候需要我们显式的把redirect:写出来

注意:

  • 当我们使用这种方式来进行重定向时,和上面完整的转发方式一样,需要把完整的路径写出来,这时的视图解析器也是不会去拼接前缀和后缀
  • 重定向不可以访问WEN-INF下的文件,在WEB-INF下的目录是不可以直接方法,是被保护的
@PostMapping("/login")
public String login(AdminInfo adminInfo, Model model)
  if (!isExistAdmin(adminInfo))
    model.addAttribute("msg","用户名密码错误!");
    return "login";
  
  // 和使用forward一样,需要把完整的路径写出来
  return "redirect:/templates/main.ftl";

以上是关于SpringMVC--08 转发和重定向的主要内容,如果未能解决你的问题,请参考以下文章

SpringMVC--08 转发和重定向

SpringMVC框架如何实现请求转发和重定向呢?

java中转发和重定向的区别

转发和重定向的区别

转发和重定向的区别

转发和重定向