为什么80%的码农都做不了架构师?>>>
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所用到的一些核心类与接口
本系列博客主要介绍以下几个部分:
- 遨游springmvc之Dispatcher
- 遨游springmvc之HandlerMapping和HandlerMethod
- 遨游springmvc之HandlerAdapter
- 遨游springmvc之WebDataBinder
- 遨游springmvc之Converter
- 遨游springmvc之HandlerMethodArgumentResolver
- 遨游springmvc之HandlerMethodReturnValueHandler
- 遨游springmvc之HandlerInterceptor
- 遨游springmvc之HandlerExceptionResolver
- 遨游springmvc之ViewResolver(未开始)
本人寒腹短识,乘工作之余浏览了下springmvc写了此篇博客,有写错之处还望springmvc大牛指点纠正,?