转发:一次请求,服务器内部调用另外的组件处理,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>