8. 请求重定向和转发
2022年9月15日
8. 请求重定向和转发
forward: 表示转发
redirect: 表示重定向
forward 和 redirect 都是关键字, 有一个共同的特点不和视图解析器一同工作
相关信息
forward 和 redirect 他们都可以访问视图文件, 比如某个 jsp, html
forward:/hello.jsp forward:/main.html
forward 和 redirect 他们都可以访问其它的 controller
forward:/some.do , redirect:/other.do
处理器方法可以返回 ModelAndView, String, void 时, 都可以使用 forward, redirect
请求转发
处理器方法返回 ModelAndView,实现转发 forward
语法: setViewName("forward:视图文件完整路径")
forward 特点: 不和视图解析器一同使用, 无视视图解析器
@Controller
public class MyController {
@RequestMapping(value = "/doForward.do")
public ModelAndView doSome(){
ModelAndView mv = new ModelAndView();
mv.addObject("msg","欢迎使用springmvc做web开发");
mv.addObject("fun","执行的是doSome方法");
//显示转发
//mv.setViewName("forward:/WEB-INF/view/show.jsp");
mv.setViewName("forward:/hello.jsp");
return mv;
}
请求重定向
语法: setViewName("redirect:视图完整路径")
redirect 特点: 不和视图解析器一同使用, 无视视图解析器
框架对重定向的操作:
框架会把 Model 中的简单类型的数据, 转为 string 作为 hello.jsp 的 get 请求参数使用
目的是在 doRedirect.do 和 hello.jsp 两次请求之间传递数据
在目标 hello.jsp 页面可以使用参数集合对象${param}获取请求参数值
${param.myname}
提示
重定向不能访问/WEB-INF 资源
@RequestMapping(value = "/doRedirect.do")
public ModelAndView doWithRedirect(String name,Integer age){
ModelAndView mv = new ModelAndView();
//数据放入到 request作用域
mv.addObject("myname",name);
mv.addObject("myage",age);
// 重定向
mv.setViewName("redirect:/hello.jsp");
// http://localhost:8080/ch08_forard_redirect/hello.jsp?myname=lisi&myage=22
// 重定向不能访问/WEB-INF资源
// mv.setViewName("redirect:/WEB-INF/view/show.jsp");
return mv;
}