Spring Web MVC 框架介绍
Spring Web MVC框架是围绕着DispatchServlet设计的,DispatchServlet负责将web请求分发到handlers,在这个分发过程中包括可配置的handler映射,视图处理,本地化,时区及主题和文件上传。默认情况的handler是基于@Controller和@RequestMapping两种注释,提供了灵活的处理方法。在Spring3.0之后,@Controller机制同样允许创建Restful的网络站点和应用,通过@PathVariable注释以及其它的特性。
面向拓展是Spring Web MVC的核心原则,Spring的原则是”Open for extension,closed for modification“。
在Spring Web MVC中一些核心类被标记为”final“。由于开发者无法对这些方法进行重写。
针对这个原则的解释在Expert Spring Web MVC中有比较详细的解释。另外在Bob Martin的文章”The Open-Closed Principle(PDF)“中也有解释。
在使用Spring MVC时不能针对final方法添加切面。比如,不能够对AbstractController.setSynchronizedOnSession()添加切面。在”Understandding AOP proxies“有针对AOP代理以及为何不能添加切面的原因。
在Spring Web MVC中,你可以使用任何对象作为命令或表单后台对象,你不需要去实现框架特定的接口或者基类。Spring的数据绑定非常灵活。例如Spring中将类型不匹配视为验证失败而不是系统错误。因此不需要将业务对象复制为表对象中无类型的字符串来处理无效的提交,或者将字符串转化为业务对象。因此将业务对象直接和表对象绑定更加方便。
Spring的视图处理也非常灵活。Controller一般用来映射处理数据和视图,当然它可以直接用来应答流并完成请求。视图名称处理可以通过文件拓展或者通过bean名称甚至自定义的ViewResolverl实现的接受头文件类型协议来完成。MVC中的M指的是映射接口,此接口代表了视图技术的完整抽象。可以和常见视图模板茹JSP、Velocity和FreeMarker记性集成,甚至直接生成XML、JSON、Atom以及气态的多种内容类型。Map可以简单的转化成正确的类型,例如JSP的请求类型,Velocity的模板等。
Spring Web MVC的特点
Spring的网络模块包括许多独特的网络支持特性:
1)清晰的角色分层。控制器、验证器、命令对象、表单对象、模型对象、DispatchServlet、处理映射,视图方案。
2)强大直观的框架和应用类JavaBean的配置,配置包括能够简单的在上下文中引用,例如表单网络控制器到业务对象和验证器。
3)适配性、非入侵性、灵活性。可以定义任意的Controller方法,并通过参数注解(如@RequestParam、@RequestHeader、@PathVariable)
4)可复用的业务代码,不需要冗余业务代码。使用业务对象作为命令或者表单对象而不需要通过扩展框架基类实现。
5)可定制的绑定和验证。类型不一致被作为应用层的验证错误,从而不需要人工进行类型解析和转换来判断数据错误。
6)自定义的handler映射和视图处理。handler映射和视图处理策略包括简单的URL配置到复杂的特定目的地策略。Spring相比web MVC在集成技术上更加灵活。
7)简单强大的JSP标签库,可以方便的进行数据绑定和主题设置。自定义的标签可以灵活的使用标签代码。
8)Bean的整个生命周期包含当前的HTTP请求或者HTTP会话中。这并非是Spring MVC本身的特性,而是Spring实用的WebApplicationContext容器的特新。
其他MVC实现的即插即用
在一些工程中,非Spring的MVC实现可能更加合适。许多团队需要来综合评估他们当前的技术和工具积累,例如JSF。
如果不想使用Spring WebMVC,而是希望能够使用Spring其它的功能,你可以将Spring集成到先用的web MVC中。通过使用ContextLoaderListener来开启Spring的根应用,并通过ServletContext属性来访问一些特性。此时,从web层面上看,仅仅是将Spring作为类库,将Spring的根应用上下文作为入口。