1、作用
处理器方法返回 ModelAndView 时,需在 setViewName()指定的视图前添加 forward:,且 此时的视图不再与视图解析器一同工作(不能同时工作),这样可以在配置了解析器时指定不同位置的视图。 视图页面必须写出相对于项目根的路径。forward 操作不需要视图解析器。 处理器方法返回 String,在视图路径前面加入 forward: 视图完整路径。
2、请求转发(setViewName方法后加forward)
//mv.setViewName("forward:show");不能这样写,因为添加了forward或者redirect,视图解析器将不会工作
mv.setViewName("forward:/WEB-INF/view/show.jsp");
3、重定向(setViewName方法后加redirect)
/*受保护资源不能通过url访问*/
//mv.setViewName("redirect:/WEB-INF/view/show.jsp");(不能这样写)
mv.setViewName("redirect:showOut.jsp");
4、示例
(1)控制器
@Controller
public class TestClass {
@RequestMapping("/showMessageForward.do")
@ResponseBody
public ModelAndView test01(String name,Integer age){
ModelAndView mv = new ModelAndView();
mv.addObject("myName",name);
mv.addObject("myAge",age);
mv.setViewName("forward:/WEB-INF/view/show.jsp");
return mv;
}
@RequestMapping("/showMessageRedirect.do")
@ResponseBody
public ModelAndView test02(String name,Integer age){
ModelAndView mv = new ModelAndView();
mv.addObject("myName",name);
mv.addObject("myAge",age);
/*受保护资源不能通过url访问*/
//mv.setViewName("redirect:/WEB-INF/view/show.jsp");
mv.setViewName("redirect:showOut.jsp");
return mv;
}
}
(2)提交数据页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<div align="center">
<form action="showMessageForward.do" method="post">
name:<input type="text" name="name">
age:<input type="text" name="age">
<input type="submit" value="提交">
</form>
</div>
<div align="center">
<form action="showMessageRedirect.do" method="post">
name:<input type="text" name="name">
age:<input type="text" name="age">
<input type="submit" value="提交">
</form>
</div>
</body>
</html>
(3)受保护资源show.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<div align="center">
${myName}<br/>
${myAge}
</div>
</body>
</html>
(4)不受保护资源showOut.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<div align="center">
${param.myName}<br/>
${param.myAge}
</div>
</body>
</html>