SpringMVC框架原理:前端控制器、处理器映射器、处理器适配器、视图解析器
什么是SpringMVC:SpringMVC是spring框架的一个模块,SpringMVC和spring无需通过中间整合层进行整合。SpringMVC是一个基于MVC的web框架。
什么是MVC:MVC是一种设计模式,M(Model模型)、V(View视图)、C(Controller控制器)
C接收request请求,请求M进行处理,M处理后返回数据到C,C再通过V进行视图渲染(v把模型数据填充到request域)后响应用户请求。BS系统下模型无法把数据填充到视图,需要通过控制器。
SpringMVC框架执行流程:
一、发起请求到前端控制器(DispatcherServlet)
二、前端控制器请求HandlerMapping,查找Handler(Controller)。可以根据xml配置、注解进行查找。
三、处理器映射器HandlerMapping向前端控制器返回Handler(Controller)
四、前端控制器调用处理器适配器去执行Handler(Controller)
五、处理器适配器去执行Handler(Controller)
六、Handler(Controller)执行完成给适配器返回ModelAndView
七、处理器适配器向前端控制器返回ModelAndView,ModelAndView是SpringMVC框架的一个底层对象,包括Model和View。
八、前端控制器请求视图解析器去进行视图解析,根据逻辑视图名解析成真正的视图,如jsp。
九、视图解析器向前端控制器返回View
十、前端控制器进行视图渲染,视图渲染将模型数据(在ModelAndView对象中)填充到request域。
十一、前端控制器向用户响应结果
组件:
1、前端控制器DispatcherServlet
作用:接受请求、响应结果,相当于转发器。
2、处理器映射器HandlerMapping
作用:根据请求的url查找Handler
3、处理器适配器HandlerAdapter
作用:按照特定规则(HandlerAdapter要求的规则)去执行Handler
4、处理器Handler
注意:编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以正确执行Handler。
5、视图解析器View Resolver
作用:进行视图解析,根据逻辑视图名解析成真正的视图(View)
6、视图View
View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf...)
前端控制器配置:
不配置以上映射器、适配器、视图解析器等组件,也可以正常运行。
因为前端控制器从DispatcherServlet.properties文件中加载处理映射器、适配器、视图解析器等组件,如果不在springmvc.xml中配置,就使用默认加载的。
spring3.1之前使用DefaultAnnotationHandlerMapping注解映射器(如果不在springmvc.xml中配置,也使用这个), spring3.1之后使用RequestMappingHandlerMapping注解映射器。
spring3.1之前使用AnnotationMethodHandlerAdapter注解适配器(如果不在springmvc.xml中配置,也使用这个), spring3.1之后使用RequestMappingHandlerAdapter注解适配器。
非注解的处理器映射器配置、handler(controller)配置、处理器适配器配置、视图解析器配置:
多个映射器可以并存(如上图中的1/2/3),前端控制器判断URL能让哪些映射器映射,就让正确的映射器处理。
多个适配器也可以并存
注解的处理器映射器和适配器:
注解的映射器和注解的适配器必须配对使用
在spring容器中加载Handler(Controller)
视图解析器配置前缀和后缀
controller(handler)中的视图指定写法
xml中视图解析器的前缀后缀配置
处理器映射器和处理器适配器总结
代替这两个配置:
SpringMVC和myBatis的系统架构
SpringMVC和mybatis的整合思路
配置文件
mybatis逆向工程生成PO类和mapper(单表的增删改查)
自定义mapper,包装对象是为了各层都能很好的获取PO的值;
扩展对象类是因为PO是逆向工程自动生成的,为了更好的扩展才定义的。
resultType应该是扩展对象,parameterType应该是包装对象。