Spring Web MVC 是什么
Spring Web MVC 是一种基于Java的实现了Web MVC 设计模式的请求驱动类型的轻量级Web框架,即使使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求——响应模式,框架的目的的就是帮助我们简化开发。Spring Web MVC也是要简化我们日常Web开发的。
另外还有一种基于组织的、事件驱动的Web框架在此就不介绍了,如Tapestry、JSF等。
Spring Web MVC也是服务到工作者模式的实现,但进行可优化。前端控制器是DispatcherServlet;应用控制器其实拆为处理器映射器(Handler Mapping)进行处理器管理和视图解析器(View Resolver)进行视图管理;页面控制器/动作/处理器为Controller接口(仅包含ModelAndView HandleRequest(request , response) 方法)的实现(也可以是任何的POJO类);支持本地化(Locale)解析、主题(Theme)解析及文件上传等;提供了非常灵活的数据验证、格式化和数据绑定机制;提供了强大的约定大于配置(惯例优先原则)的契约式编程支持。
Spring Web MVC 能帮我们做什么
- 让我们能非常简单的设计出干净的 Web 层和薄薄的 Web 层;
- 进行更简洁的 Web 层的开发;
- 天生与 Spring 框架集成(如IoC容器、AOP等);
- 提供强大的约定大于配置的契约式变成支持;
- 能简单的进行 Web 层的单元测试;
- 支持灵活的URL到页面控制器的映射;
- 非常容易与其他视图技术集成,如Velocity、FreeMarker等等,因为模型数据不放在特定的API里,而是放在一个Model里(Map数据结构实现,因此很容易被其他框架使用);
- 非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API;
- 提供一套强大的JSP标签库,简化JSP开发;
- 支持灵活的本地化、主题等解析;
- 更加简单的异常处理;
- 对静态资源的支持;
- 支持Restful风格。
Spring Web MVC 优势
- 清晰的角色划分:前端控制器(DispatcherServlet)、请求道处理器映射(HandlerMapping)、处理器适配器(HandlerAdapter)、视图解析器(ViewResolver)、处理器或页面控制器(Controller)、验证器(Validator)、命令对象(Command 请求参数绑定到的对象就叫命令对象)、表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)。
- 分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要;
- 由于命令对象就是一个POJO,无需继承框架特定API,可以使用命令对象直接作为业务对象;
- 和Spring 其他框架无缝集成,是其他Web框架所不具备的;
- 可适配,通过HandlerAdapter可以支持任意的类作为处理器;
- 可定制性,HandlerMapping、ViewResolver等能够非常简单的定制;
- 功能强大的数据验证、格式化、绑定机制;
- 利用Spring提供的Mock对象能够非常简单的进行Web层单元测试;
- 本地化、主题的解析的支持,使我们更容易进行国际化和主题的切换。
- 强大的JSP标签库,使JSP编写更容易。
- 还有比如RESTful风格的支持、简单的文件上传、约定大于配置的契约式编程支持、基于注解的零配置支持等等。