spring web mvc是一种基于java实现的请求驱动(请求-响应模型)的web层轻量级框架,spring web mvc采用了MVC(模型-视图-控制器)框架设计,将web层进行职责解耦,围绕核心处理器DispatcherServlet分派请求处理程序,可配置的处理程序映射,标签,地区,时区和主题解析以及对上传文件的支持,springmvc默认是基于@RequestMapping和@Controller注解,提供了丰富的参数、数据模型、视图、异常的处理器,解析器,适配器,过滤器来处理各类类型的请求,而且返回对应的数据结果。前端
>让咱们能很是简单的设计出干净的Web层和薄薄的Web层;前端控制器(DispatcherServlet)、请求处处理器映射(HandlerMapping)、处理器适配器(HandlerAdapter)、视图解析器(ViewResolver)、处理器或页面控制器(Controller)、验证器( Validator)、命令对象(Command 请求参数绑定到的对象就叫命令对象)、表单对象(Form Object 提供给表单展现和提交到的对象就叫表单对象)。 java
>进行更简洁的Web层的开发; web
>天生与Spring框架集成(如IoC容器、AOP等); spring
>提供强大的约定大于配置的契约式编程支持; 编程
>能简单的进行Web层的单元测试; 数据结构
>支持灵活的URL到页面控制器的映射; mvc
>很是容易与其余视图技术集成,如Velocity、FreeMarker等等,由于模型数据不放在特定的API里,而是放在一个Model里(Map数据结构实现,所以很容易被其余框架使用); app
>很是灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,没必要实现特定框架的API; 框架
>提供一套强大的JSP标签库,简化JSP开发; jsp
>支持灵活的本地化、主题等解析;
>更加简单的异常处理;
>对静态资源的支持;
>支持Restful风格。
原理图3.1
时序图3.2
3.3视图解析
根据原理图3.一、时序图3.二、视图解析图3.3(【图画的很差,不要咬我😳,还有图片是svg,看不清能够尽情放大不影响清晰度!】,Dispatcher 视图解析部分在3.2中画不开了😖,在图3.3补充),咱们能够来简单描述下springmvc处理用户请求并返回响应的过程:
1.首先,用户发起一个请求,springmvc将用户请求统一转发到核心Servlet:DispatcherServlet
2.DispatcherServlet根据用户的请求,去找HandlerMapping(经常使用的有映射处理器RequestMappingHandlerMapping),咱们理解为映射处理器,HandlerMapping会根据请求返回一个HandlerMethod,HandlerMethod包含了请求对应控制器、方法、参数等信息
3.Dispatcher将HandlerMethod包装,造成一个处理器执行链HandlerExecutionChain,它包含了HandlerMethod和Interceptor(拦截器),当请求对应的拦截器不是空的时候Dispatcher会先处理拦截器里面的东西
4.此时Dispatcher根据HandlerMethod,去找对应的Adapter(适配器),适配器用来最终处理请求,适配器中包含HandlerMethodArgumentResolver(参数解析器)和HandlerMethodReturnValueHandler(返回值处理程序)
5.适配器中处理了各类类型的请求参数,固然咱们也能够有本身的参数解析器,springmvc将处理好的参数传入最终的控制器执行程序(invoke(args)),返回对应的值,适配器再根据自带的HandlerMethodReturnValueHandler处理程序将返回值包装,而且返回一个ModelAndView
6.ModelAndView包含了Model(模型【LinkedHashMap】)对象和View(视图)对象
7.DispatcherServlet根据ModelAndView处理派遣的最终结果,并根据提供的视图解析器,将model对象暴露到request请求中,返回对应的视图,渲染(如jsp用JstlView)
以上咱们已经简单介绍了springmvc工做的原理,接下来就让咱们介绍以上springmvc所用到的一些核心类与接口
本系列博客主要介绍如下几个部分:
本人寒腹短识,乘工做之余浏览了下springmvc写了此篇博客,有写错之处还望springmvc大牛指点纠正,😋