1、作用

处理器方法返回 ModelAndView 时,需在 setViewName()指定的视图前添加 forward:,且 此时的视图不再与视图解析器一同工作(不能同时工作),这样可以在配置了解析器时指定不同位置的视图。 视图页面必须写出相对于项目根的路径。forward 操作不需要视图解析器。 处理器方法返回 String,在视图路径前面加入 forward: 视图完整路径。

2、请求转发(setViewName方法后加forward)

image.png

  1. //mv.setViewName("forward:show");不能这样写,因为添加了forward或者redirect,视图解析器将不会工作
  2. mv.setViewName("forward:/WEB-INF/view/show.jsp");

3、重定向(setViewName方法后加redirect)

  1. /*受保护资源不能通过url访问*/
  2. //mv.setViewName("redirect:/WEB-INF/view/show.jsp");(不能这样写)
  3. mv.setViewName("redirect:showOut.jsp");

4、示例

(1)控制器

  1. @Controller
  2. public class TestClass {
  3. @RequestMapping("/showMessageForward.do")
  4. @ResponseBody
  5. public ModelAndView test01(String name,Integer age){
  6. ModelAndView mv = new ModelAndView();
  7. mv.addObject("myName",name);
  8. mv.addObject("myAge",age);
  9. mv.setViewName("forward:/WEB-INF/view/show.jsp");
  10. return mv;
  11. }
  12. @RequestMapping("/showMessageRedirect.do")
  13. @ResponseBody
  14. public ModelAndView test02(String name,Integer age){
  15. ModelAndView mv = new ModelAndView();
  16. mv.addObject("myName",name);
  17. mv.addObject("myAge",age);
  18. /*受保护资源不能通过url访问*/
  19. //mv.setViewName("redirect:/WEB-INF/view/show.jsp");
  20. mv.setViewName("redirect:showOut.jsp");
  21. return mv;
  22. }
  23. }

(2)提交数据页面

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>Title</title>
  5. </head>
  6. <body>
  7. <div align="center">
  8. <form action="showMessageForward.do" method="post">
  9. name:<input type="text" name="name">
  10. age:<input type="text" name="age">
  11. <input type="submit" value="提交">
  12. </form>
  13. </div>
  14. <div align="center">
  15. <form action="showMessageRedirect.do" method="post">
  16. name:<input type="text" name="name">
  17. age:<input type="text" name="age">
  18. <input type="submit" value="提交">
  19. </form>
  20. </div>
  21. </body>
  22. </html>

(3)受保护资源show.jsp

image.png

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>Title</title>
  5. </head>
  6. <body>
  7. <div align="center">
  8. ${myName}<br/>
  9. ${myAge}
  10. </div>
  11. </body>
  12. </html>

(4)不受保护资源showOut.jsp

image.png

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>Title</title>
  5. </head>
  6. <body>
  7. <div align="center">
  8. ${param.myName}<br/>
  9. ${param.myAge}
  10. </div>
  11. </body>
  12. </html>