【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";
}