【Spring-MVC】转发和重定向
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";
}

本文详细介绍了 Spring MVC 中的转发和重定向机制,包括它们的基本用法及注意事项,例如如何通过 forward 和 redirect 指令来实现页面跳转,并解释了这两种方式在路径处理上的差异。
501

被折叠的 条评论
为什么被折叠?



