Spring MVC,又名Spring Web MVC,是一款主流的Web MVC框架,与Struts2框架类似,其主要目的是构建Web应用程序的全功能MVC模块,在View层和Controller层之间进行映射,完成View层和Model层之间的数据转换。
Spring MVC框架通过 DispatcherServlet 分发请求处理程序,包括可配置的映射,视图解决方案,语言,时区,主题以及上传文件。默认的处理器是基于 @Controller 和 @RequestMapping 注解处理各种方法。从 Spring 3.0开始, @Controller 机制允许用户通过 @PathVariable 注解及其它特性创建 RESTful Web站点和应用。
Spring Web MVC的一个关键原则是对扩展开放,对修改封闭,也即我们常说的“开闭原则”。所以Spring Web MVC核心类中的一些方法被标记为 final 类型的。
在 Spring Web MVC中,用户可以将任何对象作为命令或者请求访问的对象,而不需要实现特定framework框架的接口或基类。Spring的数据绑定机制是非常灵活的:比如,它能把类型匹配错误当做验证性错误处理而不是系统错误,这样错误类型就成为可评估的错误。尽管它像你不需要重复的业务对象的属性一样简单,表单中的无类型字符串简单处理无效的提交,或将字符串转为合法的类型。但它通常是可以直接绑定的业务对象。
Spring的解决方案通常是非常灵活的。 Controller 的职责是选择一个视图并数据映射到该视图上,当然 Controller 也能够直接写输出流来完成请求。 视图机制是高可配的,通过文件扩展名,Accept header头类型,bean名称,属性文件以及自定义的 ViewResolver实现。MVC中的 model是 Map 接口,它允许完整的抽象视图技术,可以与JSP,Velocity及Freemarker这样基于模板的渲染技术集成,也可以生成XML, JSON, Atom以及其它类型的内容。 Map 模型很容易转换成其它的格式,比如JSP请求属性,Velocity模板模型。
Spring MVC 4特性:
-
角色分离:controller, validator, command object, form object, model object, DispatherServlet, handler mapping, view resolver等等都可以单独实现。
-
强大简单的配置框架及应用类作为JavaBeans:配置包括简单的上下文引用,比如web前端控制器对业务对象以及验证器的引用。
-
适应性,灵活性,无侵入性:可以使用诸如@RequestParam, @RequestHeader, @Pathvariable这样的注解定义任意控制器的方法签名。
-
可重用业务代码:使用存在的业务对象当做command object或 form object,而不是继承框架的基类当做镜像。
-
可定制的绑定和验证机制:类型不匹配当做应用级别的验证错误,使用传值,本地化日期和数据绑定等替代将手动将对象转为字符串或转换为业务对象。
-
可定制的handler映射和视图机制。Handler映射和视图机制从简单的URL配置到复杂的,专门的解决策略都能处理。
-
灵活的模型转移机制:使用Map中key/value这样的模型转移机制很容易与其他视图技术集成。
-
支持国际化,支持时区,支持主题,支持JSP,支持JSTL,支持Velocity等。
-
JSP标签库,又称Spring标签库支持数据绑定和主题。
关于Spring MVC,开发者使用最多的是其 DispatcherServlet转发,通过注解@Controller配置转发路径,并通过ModelAndView返回视图,这也是Web MVC的主要内容。Spring MVC各版本的内容相差不大,学会了一个版本的使用,其它版本也就会使用了。