@controller +返回值String表示跳转页面,必然经过视图解析器,拼接前后缀
默认转发
@RequestMapping("/123")
public String test(HttpSession session) {
System.out.println("123");
return "456";
}
服务器在得到 / 123 的请求后调用 test 方法,输出 123 然后寻找 456.jsp(这里已经配置了视图,全路径为 / WEB-INF/jsp/456.jsp) 文件
forward 转发
@RequestMapping("/123")
public String test(HttpSession session) {
System.out.println("123");
return "forward:456";
}
@RequestMapping("/456")
public String test1(HttpSession session) {
System.out.println("456");
return "456";
}
服务器得到 / 123 的请求后调用 test 方法,输出 123,但是与默认转发不同的是, forward 转发会继续寻找 / 456 的解析而不是寻找 456.jsp 文件,
如果 test1 方法不存在则会报 404 的错误,即使 456.jsp 文件存在
redirect 转发
@RequestMapping("/123")
public String test(HttpSession session, HttpServletRequest hr) {
System.out.println("123");
hr.setAttribute("test", "123");
session.setAttribute("session", 123);
return "redirect:456";
}
@RequestMapping("/456")
public String test1(HttpSession session, HttpServletRequest hr) {
System.out.println("456");
System.out.println(hr.getAttribute("123"));
System.out.println(session.getAttribute("session"));
return "456";
}
效果和 forward 转发差不多,但是浏览器的地址会被修改为 / 456 结尾,还有 redirect 后原来的 request 中的内容会丢失,session 中的内容不会丢失,而 forward 都不会