SpringMVC怎样请求重定向和转发
文献种类:专题技术文献;
开发工具与关键技术:IntelliJ IDEA 2020.1.1
作者:卢媛媛;
撰写时间:2021/01/20
什么是Spring MVC ?
Spring MVC是一个基于MVC架构的用来简化web应用程序开发的应用开发框架,它是Spring的一部分,它和Struts2一样都属于表现层的框架。
MVC(Model模型 View 视图 Controller 控制器)
模型:用于封装业务逻辑处理(java类);
视图:用于数据展现和操作界面(Servlet);
控制器:用于协调视图和模型(jsp);
处理流程:视图将请求发送给控制器,由控制器选择对应的模型来处理;
模型将处理结果交给控制器,控制器选择合适的视图来展现
重定向与转发的区别:
①重定向时浏览器上的网址改变,而重定向实际上产生了两次请求(速度慢),但是重定向时的网址可以是任何网址
②转发时浏览器上的网址不变,转发只有一次请求(速度快),但是转发的网址必须是本站点的网址
forward:表示转发,
实现request.getRequestDispatcher(“xx.jsp”).forward();
redirect:表示重定向,实现 response.sendRedirect(“xxx.jsp”);
Controller类:当项目中有视图解析器,这样就不可以访问WEB-INF以外的资源了,所以显示转发有这个用途
@RequestMapping(value = "/user")
@Controller
public class myController {
@RequestMapping(value = "/doForward.do")
public ModelAndView doforward(String name, int age) {
ModelAndView mv = new ModelAndView();
mv.addObject("name", name);
mv.addObject("age", age);
//显示转发
// mv.setViewName("forward:/WEB-INF/result.jsp");
//当项目中有视图解析器,这样就不可以访问WEB-INF以外的资源了,所以显示转发有这个用途
mv.setViewName("forward:/result.jsp");
// mv.setViewName("show");//这个也是转发
return mv;
}
}
当项目中加入了视图解析器的话,我们不可以访问WEB-INF以外的资源页面了,所以这个显示转发就可以解决这个问题了,同理,重定向
@RequestMapping("/hello")
public String Hello(){
System.out.println("springmvc程序");
//请求转发
return "forward:/WEB-INF/jsp/success.jsp";
}
输出结果截图:
很奇怪,为什么没有获取到数据?
并且浏览器的访问地址也发生改变,地址中由输入的参数
是因为:mv.setViewName(“redirect:/result.jsp”);程序走到这步时,浏览器发起第二次请求,页面不在是doForward.do请求的页面地址了。并且框架对请求重定向的操作:框架会把ModelAndView的简单类型数据转为字符串数据,作为result.jsp的get请求的参数使用。
目的是可以在doRedirect.do和result.jsp两次请求之间传递数据
为什么没有获取到数据?
就是mv.addObject(“name”,myname) 数据是放入到request的作用域的,而在两次请求中页面发生改变,这个request对象不在是同一个对象了,当然就获取不到数据了