Spring Web模型-视图-控制器(MVC)框架是围绕DispatcherServlet设计的,DispatcherServlet将接收的请求分派给应用程序。SpringMVC具有配置处理程序映射关系,视图解析,区域设置,时区和主题解析以及上传文件等功能。
简述SpringMVC工作内容:
-
接收用户请求;
-
指定应用程序实现请求的功能;
-
将应用程序处理的结果数据封装成要求的视图;
-
响应用户请求(回传封装的视图)。
完整的框架工作流程如下:
1. 用户发送请求至前端控制器DispatcherServlet;
2. DispatcherServlet收到请求调用HandlerMapping处理器映射器;
3. 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;
4. DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
5. 执行处理器(Controller,也叫后端控制器);
6. Controller执行完成返回ModelAndView;
7. HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet;
8. DispatcherServlet将ModelAndView传给ViewReslover视图解析器;
9. ViewReslover解析后返回具体View;
10. DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中);
11. DispatcherServlet响应用户。
上图中涉及到很多关键组件,下面对其进行说明。
-
DispatcherServlet:前端控制器
用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性。
-
HandlerMapping:处理器映射器
HandlerMapping负责根据用户请求找到Handler即处理器,SpringMVC提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
-
Handler:处理器
Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。
由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。
-
HandlAdapter:处理器适配器
通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
-
View Resolver:视图解析器
View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
-
View:视图
SpringMVC框架提供了很多的View视图类型的支持,包括:jstlView、freemarkerView、pdfView等。
一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。
在SpringMVC的各个组件中,处理器映射器、处理器适配器、视图解析器称为SpringMVC的三大组件。
SpringMVC框架加入对注解的支持后,配置和使用变得非常简单,这里不做赘述。下面再介绍两个知识:SpringMVC的拦截器以及对Restful的支持。
-
SpringMVC拦截器
Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理,实现拦截器的功能需要实现接口HandlerInterceptor,该接口定义了三个方法:
-
preHandle
此方法在controller执行前调用,可以利用此方法实现登录校验、权限拦截等功能。
-
postHandle
此方法controller执行后但未返回视图前调用,此处可对模型数据进行加工处理,例如加入公用信息以便页面显示。
-
afterCompletion
此方法在controller执行后且视图返回后调用,可用于记录操作日志,资源清理等。
自定义的拦截器需要在配置文件中进行配置才可被框架应用,具体拦截的Mapping可通过配置或者直接在方法上使用注解实现拦截功能映射。
-
Restful风格
Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格,是对http协议的诠释。
资源定位:互联网所有的事物都是资源,要求url中没有动词,只有名词。没有参数。Url格式:
http://blog.csdn.net/beat_the_world/article/details/45621673
资源操作:使用Put、Delete、Post、Get,使用不同方法对资源进行操作。分别对应添加、删除、修改、查询。一般使用时还是Post和Get。Put和Delete几乎不使用。
SpringMVC对Restful支持只需按照Restful请求Url的格式对最后的资源id进行解析即可,@PathVariable注解可实现将请求URL中的模板变量映射到功能处理方法的参数上的功能。