SpringMVC执行流程
架构流程
- 用户发送请求至前端控制器DispatcherServlet
- DispatcherServlet收到请求调用HandlerMapping处理器映射器
- 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet
- DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
- 执行处理器(Controller,也叫后端控制器)
- Controller执行完成返回ModelAndView
- HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
- DispatcherServlet将ModelAndView传给ViewReslover视图解析器
- ViewReslover解析后返回具体View
- DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
- DispatcherServlet响应用户
三大组件
- HandlerMapping,处理器映射器,通过url找到执行的方法,相当于hashmap,key是url,value是方法对象
- HandlerAdapter,处理器适配器,根据不同的handler去找到不同的HandlerAdapter去执行这个handler
- ViewReslover,视图解析器,根据不同类型的视图去解析视图
关于org.springframework.ui.Model
model底层其实就是用request域来传递数据的,但是对request域进行了拓展
SpringMVC默认支持的参数类型
HttpServletRequest request, HttpServletResponse response, HttpSession session, Model model
SpringMVC可以接受的参数类型 (7种)
1、springMvc可以直接接收基本数据类型,包括string,spirngMvc可以帮你自动进行类型转换
2、controller中方法接收的参数的变量名称必须要等于页面上input框的name属性值
3、spirngMvc可以直接接收pojo类型:要求页面上input框的name属性名称必须等于pojo的属性名称
4、VO类型
5、数组
6、List
7、默认数据类型
Controller方法返回值
1、返回ModelAndView。addObject方法指定返回页面的数据,setViewName方法指定返回的页面
ModelAndView
modelAndView.addObject("itemList", list); 指定返回页面的数据
modelAndView.setViewName("itemList"); 指定返回的页面
2、返回String。返回到指定页面,返回页面数据通过Model来完成
返回普通字符串,就是页面去掉扩展名的名称, 返回给页面数据通过Model来完成
返回的字符串以forward:开头为请求转发
返回的字符串以redirect:开头为重定向
3、返回void(使用它破坏了springMvc的结构,所以不建议使用)。可以用request.setAttribute给页面设置数据,也可以用request.getRequestDispatcher().forward()来指定返回的页面。如果controller返回值为void则不走springMvc的组件,所以要写页面的完整路径名称