【原创】遨游springmvc之原理篇

为什么80%的码农都做不了架构师?>>>   hot3.png

1.Springmvc是什么

spring web mvc是一种基于java实现的请求驱动(请求-响应模型)的web层轻量级框架,spring web mvc采用了MVC(模型-视图-控制器)框架设计,将web层进行职责解耦,围绕核心处理器DispatcherServlet分派请求处理程序,可配置的处理程序映射,标签,地区,时区和主题解析以及对上传文件的支持,springmvc默认是基于@RequestMapping和@Controller注解,提供了丰富的参数、数据模型、视图、异常的处理器,解析器,适配器,过滤器来处理各种类型的请求,并且返回对应的数据结果。

 

2.Springmvc能帮我们处理什么

>让我们能非常简单的设计出干净的Web层和薄薄的Web层;前端控制器(DispatcherServlet)、请求到处理器映射(HandlerMapping)、处理器适配器(HandlerAdapter)、视图解析器(ViewResolver)、处理器或页面控制器(Controller)、验证器(   Validator)、命令对象(Command  请求参数绑定到的对象就叫命令对象)、表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)。 

>进行更简洁的Web层的开发; 

>天生与Spring框架集成(如IoC容器、AOP等); 

>提供强大的约定大于配置的契约式编程支持; 

>能简单的进行Web层的单元测试; 

>支持灵活的URL到页面控制器的映射; 

>非常容易与其他视图技术集成,如Velocity、FreeMarker等等,因为模型数据不放在特定的API里,而是放在一个Model里(Map数据结构实现,因此很容易被其他框架使用); 

>非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API; 

>提供一套强大的JSP标签库,简化JSP开发; 

>支持灵活的本地化、主题等解析; 

>更加简单的异常处理; 

>对静态资源的支持; 

>支持Restful风格。

 

3.Springmvc原理图

原理图3.1

时序图3.2

3.3视图解析

 

根据原理图3.1、时序图3.2、视图解析图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)

 

4.个性导航

以上我们已经简单介绍了springmvc工作的原理,接下来就让我们介绍以上springmvc所用到的一些核心类与接口

本系列博客主要介绍以下几个部分:

  1. 遨游springmvc之Dispatcher
  2. 遨游springmvc之HandlerMapping和HandlerMethod
  3. 遨游springmvc之HandlerAdapter
  4. 遨游springmvc之WebDataBinder
  5. 遨游springmvc之Converter
  6. 遨游springmvc之HandlerMethodArgumentResolver
  7. 遨游springmvc之HandlerMethodReturnValueHandler
  8. 遨游springmvc之HandlerInterceptor
  9. 遨游springmvc之HandlerExceptionResolver
  10. 遨游springmvc之ViewResolver(未开始)

本人寒腹短识,乘工作之余浏览了下springmvc写了此篇博客,有写错之处还望springmvc大牛指点纠正,?

 

 

 

转载于:https://my.oschina.net/kings0/blog/716647

你可能感兴趣的:(【原创】遨游springmvc之原理篇)