spring mvc是什么?
spring web mvc:一种基于java的实现了web mvc设计模式的请求驱动类型的轻量级web框架。我想这是对spring web mvc的比较精简准确的描述。那么什么是web mvc设计模式?其实这种架构模式我想做web开发的都有一定的了解,它其实是把web层的职责解耦合,主要分为控制器、模型、视图。它使用请求-响应模型,来触发相应控制器转发请求给相应模型处理,模型处理之后返回数据,控制器再把数据渲染到指定的view层。而spring mvc是对这种思想的很好的一种轻量化实现。借助它可以简化我们日常web应用开发的复杂性。
组件组成
spring web mvc有几个核心的组件。
- 前端控制器:DispatcherServlet
- 处理器映射器:HandlerMapping
- 处理器适配器:HandlerAdapter
- 视图解析器:ViewResolver
- 页面控制器/处理器:Controller
spring web mvc能做什么 ?
- 能让我们更容易实现web应用开发,让我们编写的应用扩展性弄好、易于解耦
- 天生与spring集成,更方便企业组件管理
- 支持灵活的url到页面控制器的映射
- 非常容易与其它第三方视图技术集成
- 非常灵活的数据校验、格式化、绑定机制
- 提供一套强大的jsp标签库,简化jsp的开发,显著提高开发效率
- 支持灵活的本地化、主题等解析
- 支持restful风格
- 对静态资源有特殊
- 更加通用简单的异常处理机制
spring web mvc架构图
总体过程描述如下:
- 用户发送请求-》DispatcherServlet,它只是核心调度器,即统一访问入口点,它主要用来把控整个流程;它把请求委托给其它的解析器来作实际处理
- DispatcherServlet-》HandlerMapping,HandlerMapping即为请求url解析器,它主要负责把请求的url映射到HandlerExecutionChain对象上,HandlerExecutionChain为处理器执行链,处理器执行链相对于HandlerMappiing是一个抽象的概念,它只负责把一个确切的请求映射到一个确切的执行链上,而执行链里面是包含一个页面控制器和多个拦截器, 这是一种策略模式,执行链里面的具体有哪些Handler是通过配置动态确定的
- DispatcherServlet-》HandlerAdapter,处理器适配,即适配器模式的应用,从而支持更多类型的处理器
- HandlerAdapter-》调用处理器功能方法,HandlerAdapter会适配并调用到真正处理器的功能处理方法,并返回一个ModelAndView(包含模型数据、逻辑视图名)
- ModelAndView-》ViewResolver,ViewResolver会把ModelAndView解析到一个具体view,通过这种策略模式很容易更换到其它的视图技术
- View-》渲染,view会根据传进来的模型数据进行渲染,
- 控制权返回给DispatcherServlet,由DispatcherServlet返回响应给用户,至此一个基于请求-响应的流程结束。
就这样一个完整的流程分析完成,抛开mvc框架来说,我们开发一个web的应用流程:接收请求-》处理请求-》返回响应,而mvc其实也遵循这样一个流程,但是为什么spring web mvc能实现这么多的好处?我想是因为它把过程给分解,职责给分离,业务进行抽象性总结提取,所以才能做到通用、灵活!