转发:一次请求,服务器内部调用另外的组件处理,request和response可以共用,有限制性,只能转发到本应用中的某些资源,页面或者controller请求

课可以访问WEB-INF目录下面的页面

 

重定向:两次请求,地址会改变,request和response不能共用,不能直接访问WEB-INF下面的资源,

 

根据所要跳转的资源,可以分为跳转到页面或者跳转到其他controller

一、返回ModelAndView时的请求转发
当controller中的方法返回ModelAndView的时候,默认是使用的转发。当然,我们也可以显式的指出要使用转发,此时,需在 setViewName()指定的视图前添加forward:,此时springmvc.xml文件中配置的视图解析器将会失效,即需要在setViewName中写上jsp相对于项目根的路径。

1:转发到页面
/**
  * 转发返回ModelAndView对象
  * @return
  * @throws Exception
  */
 @RequestMapping("/forwardMAV.do")
 public ModelAndView forwardMAV()throws Exception{
  
     ModelAndView mv = new ModelAndView();
     mv.addObject("type", "转发返回ModelAndView");
     //默认情况下使用转发
     //mv.setViewName("/result");
  
     //手动显式指定使用转发,此时springmvc.xml配置文件中的视图解析器将会失效
     mv.setViewName("forward:/jsp/result.jsp");
     return mv;
 }
 需要在webapp目录下添加jsp/result.jsp文件:2:转发到controller
使用转发跳转到其他controller中
@RequestMapping("/forwardMAV.do")
 public ModelAndView forwardMAV()throws Exception{
  
     ModelAndView mv = new ModelAndView();
  
     //手动显式指定使用转发,此时springmvc.xml配置文件中的视图解析器将会失效
     mv.setViewName("forward:other.do");
     return mv;
 }
 创建OtherController:/**
  * 被跳转的controller
  */
 @Controller
 public class OtherController {
  
     /**
      * 被跳转的controller返回result.jsp
      * @return
      * @throws Exception
      */
     @RequestMapping("/other.do")
     public ModelAndView other()throws Exception{
  
         ModelAndView mv = new ModelAndView();
         mv.addObject("type", "被跳转的controller");
  
         mv.setViewName("result");
         return mv;
     }
 }


二、返回ModelAndView时的重定向:发送的get请求,参数在url后面

如果要实现重定向,则需在setViewName()指定的视图前添加redirect:,此时springmvc.xml文件中配置的视图解析器将会失效,即需要在setViewName中写上jsp相对于项目根的路径。重定向的方式在request域中的数据会失效,此时可以通过ModelAndView来传递数据,但是只能传递基本数据类型和String类型,因为spring mvc会将传递的数据以请求参数的方式放到url的后面,此时任何数据类型都会被转换为普通的字符串。另外,我们在jsp中取值的时候需要使用 EL 表达式中的请求参数param读取。

除此之外,你还可以将数据放到HttpSession域中,这里就不演示了。

1.重定向到页面
/**
  * 重定向返回ModelAndView对象
  * @return
  * @throws Exception
  */
 @RequestMapping("/redirectMAV.do")
 public ModelAndView redirectMAV(School school,String name)throws Exception{
  
     ModelAndView mv = new ModelAndView();
  
     //在重定向中可以使用ModelAndView传递数据,但是只能传递基本数据类型和String类型
     mv.addObject("school",school);
     mv.addObject("name", name);
  
     //使用重定向,此时springmvc.xml配置文件中的视图解析器将会失效
     mv.setViewName("redirect:/jsp/result.jsp");
     return mv;
 result.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %>
 <html>
 <head>
     <title>Title</title>
 </head>
 <body>
  
 ${school.schoolName}<br>
 ${param.school.address}<br>
 ${param.name}
 </body>
 </html>