1. Spring Web MVC框架简介

本文详细介绍了Spring Web MVC架构的设计原理与特点,包括DispatcherServlet的作用、灵活的控制器方法签名、可定制的绑定和验证机制,以及强大的模型转换能力。此外还探讨了与其他MVC实现的集成可能性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring Web 模型-视图-控制器(MVC)架构是围绕着一个可以将请求分发到处理器的DispatcherServlet设计的,同时还有可配置的处理器映射,视图解析,本地化,时区和主题解析,也有对上传文件的支持。默认的处理器基于@Controller@RequestMapping注解,提供了许多不同的灵活的处理方法。从Spring3.0开始,@Controller机制也允许开发者通过@PathVariable注解和其它特性创建RESTful Web站点和应用程序。

“对扩展开放......”在Spring Web MVC中是一个关键设计原则,并且在Spring中一般而言是“对扩展开放,对修改关闭”原则。

Spring Web MVC核心类中的有些方法都被标记为final。作为开发者不能覆盖这些方法来支持自己的行为。这并不是任意的,但是一定要在头脑中有这样的原则。

开发者使用Spring MVC的时候不能给final方法添加增强。例如,开发者为AbstractController.setSynchronizeOnSession()添加增强。

Spring Web MVC中开发者把任何对象用作命令或表单回显对象;开发者不需要实现某个框架特定的接口或基类。Spring的数据绑定非常灵活:例如,它可以把非匹配的类型当作是一个可以由应用程序进行评估验证错误,而不是把它作为系统错误。因此,开发者不需要将业务对象的属性作为简单的、没有类型的字符串复制到表单对象中,用于简单地处理无效的提交,或者正确地转换字符串。取而代之的更好的方案通常是直接绑定到开发者业务对象。

Spring的视图解析是非常灵活的。控制器的典型任务是准备一个模型Map,并选择一个视图名称,但它也可以通过直接写响应流的方式完成请求的处理。视图名称解析是高度可配置的,这样的配置可以通过文件后缀或Accept头内容类型协商,通过Bean名称,属性文件,甚至自定义的ViewResolver实现完成。模型(MVC中的M)是一个Map接口,它允许视图技术的彻底抽象。开发者可以直接集成基于渲染的技术,如JSPVelocityFreemarker,或者直接生成XMLJSONAtom,以及许多其它内容类型。模型Map被简单的转换成一种合适的格式,如JSP请求属性,某个Velocity模板模型。

1.1. Spring Web MVC的特性

Spring Web

Spring Web 流(SWF)的目标是成为管理Web应用页面流的最佳解决方案。

SWFServletPortler环境中集成了现在框架,如Spring MVCJSF。如果开发者有一个或多个业务处理过程需要使用对话模型而不是纯粹的请求模型,那么SWF就可能是这样的解决方案。

SWF允许开发者将逻辑页面流捕获为可用于不同情形的自包含模块,就其本身而言,它是一种构建web应用程序模块的理念,它可以指引用于通过受控的导航来驱动业务过程。

Springweb模块包含了许多独特的支持web的特性:

1、清晰的角色划分:每一个角色,包括控制器(controller)、验证器(validator)、 命令对象(command object)、表单对象(form object)、模型对象(model object)、 Servlet分发器(DispatcherServlet)、 处理器映射(handler mapping)、视图解析器(view resolver)等等,都可以由一个特定的对象来实现。

2、强大而直接的使用JavaBean配置框架和应用程序类的方式。这个配置功能包含轻松的跨上下文引用,如web控制器到业务类和验证器类的引用。

3、可适配、非侵入和灵活性:Define any controller method signature you need,

possibly using one of the parameter annotations (such as @RequestParam, @RequestHeader,

@PathVariable, and more) for a given scenario.根据需要定义定义任意它控制器方法签名,对于给定的应用场景可以使用众多参数注解中的一个(如@RequestParam@RequestHeader@PathVaribale等等)。

4、可重用的业务代码,不需要复制:可以使用现有的业务对象作为命令或表单对象,而不需要去通过通过扩展某个特定框架基类来镜像它们;

5、可定制的绑定(binding) 和验证(validation):比如将类型不匹配作为应用程序级的验证错误,可以保存错误的值。再比如本地化的日期和数字绑定等等。在其他某些框架中,开发者只能使用字符串表单对象, 需要手动解析它并转换到业务对象。

6、可定制的处理器映射和视图解析:Spring提供的处理器映射和视图解析策略包括从最简单的URL映射, 到复杂的、专用的解析策略。与某些web MVC框架强制开发人员使用单一特定技术相比,Spring显得更加灵活。

7、灵活的模型转换:基于Map/值的模型可以轻松地与各种视图技术的集成。

8、可定制的本地化,时区和主题解析,支持在JSP中可选择地使用Spring标签库,支持JSTL,支持Velocity(不需要额外的中间层)等等。

9、简单而强大的JSP标签库(Spring Tag Library)提供包括诸如数据绑定和主题(theme) 等许多功能的支持。

10JSP表单标签库:在Spring2.0中引入的表单标签库,使得在JSP中编写表单更加容易。

11Spring Bean的生命周期可以被限制在当前的HTTP Request或者HTTP Session。 准确的说,这并非Spring MVC框架本身特性,而应归属于Sping MVC使用的WebApplicationContext容器。

1.2. 其它MVC实现的可插拔性

Spring MVC实现对于某些项目来说可能更好。许多团队希望利用他们现有的技能和工具资产,如JSF

如果开发者不想使用SpringWeb MVC,而又想利用Spring提供的其它解决方案,开发者可以轻松的将他所选择的web MVC框架与Spring集成起来。通过SpringContextLoaderListener可以简单的起动一个Spring应用程序根上下文,并且可以在任意动作对象中通过ServletContext属性访问到它(或者Spring提供的相应的帮助方法)。因为没能执行任何“插件”,因此就没有进行专门集成的必要。从Web层的观点出发,开发者可以简单的将Spring用作一个库,应用程序根上下文实例就是这个库的入口点。

开发者注册BeanSpring的服务可以在没有SpringWeb MVC的情况下唾手可得。在这种场景下,Spring与其它web框架没有冲突。它可以简单的用于纯Web MVC框架做不到的任何领域,从bean配置到数据访问再到事务处理。因此,开发者可以使用Spring中间层和/或数据访问层,甚至只需要使用JDBCHibernate的事务抽象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值