SpringMVC重定向和转发
关于视图解析器
SpringMVC中的视图解析器的主要作用就是将逻辑视图转换成用户可以看到的物理视图。
当用户对SpringMVC应用程序发起请求时,这些请求都会被SpringMVC的DispatcherServlet处理,通过处理器找到最为合适的HandlerMapping定义的请求映射中最为合适的映射,然后通过HandlerMapping找到相对应的Handler,然后再通过相对应的HandlerAdapter处理该Handler。返回结果是一个ModelAndView对象,当该ModelAndView对象中不包含真正的视图,而是一个逻辑视图路径的时候,ViewResolver就会把该逻辑视图路径解析为真正的View视图对象,然后通过View的渲染,将最终结果返回给用户。
SpringMVC中处理视图最终要的两个接口就是ViewResolver和View,ViewResolver的作用是将逻辑视图解析成物理视图,View的主要作用是调用其render()方法将物理视图进行渲染。
一般来说,对于SpringMVC控制器中的方法,无论是返回String、View或者是ModelAndView,SpringMVC在内部都会将返回结果封装成ModelAndView对象,然后返回给用户。
//转发重定向,不需要视图解析器(HelloController.xml中的)
@Controller
public class ModelTest1 {
@RequestMapping("/m1/t1")
public String test1(Model model){
//转发
model.addAttribute("msg","hello ModelTest1");
return "/WEB-INF/jsp/hello.jsp"; //在没有视图解析器的情况下这种方式是可以的。
}
@RequestMapping("/m1/t2")
public String test2(Model model){
model.addAttribute("msg","hello ModelTest2");
//转发
//在有视图解析器的时候把 forward:/ 删掉即可
return "forward:/hello.jsp";
}
@RequestMapping("/m1/t3")
public String test3(Model model){
model.addAttribute("msg","hello ModelTest3");
//重定向,有无视图解析器都这样写
return "redirect:/hello.jsp";
}
}