SpringMVC(1) - 简介

https://docs.spring.io/spring/docs/4.3.20.RELEASE/spring-framework-reference/htmlsingle/#mvc-introduction

Spring Web model-view-controller(MVC)框架是围绕DispatcherServlet设计的,DispatcherServlet将请求分派给处理器,具有可配置的处理器映射器,视图解析器,区域设置,时区和主题解析器以及对上传文件的支持。 默认处理器基于@Controller和@RequestMapping注解,提供各种灵活的处理方法。 随着Spring 3.0的引入,@Controller机制还允许通过@PathVariable注解和其他功能创建RESTful Web站点和应用程序。

注:

“Open for extension ...” Spring Web MVC和Spring中的一个关键设计原则是“Open for extension,closed for modification”原则(Open-Closed Principle 开-闭原则:对扩展开放,对修改关闭)。

Spring Web MVC核心类中的一些方法标记为final。 作为开发人员,无法覆盖这些方法来提供自己的行为。 这不是随意的,而是特别考虑到这一原则。

在Spring Web MVC中,可以将任何对象用作命令或表单支持对象; 不需要实现特定于框架的接口或基类。 Spring的数据绑定非常灵活:例如,它将类型不匹配视为可由应用程序评估的验证错误,而不是系统错误。 因此,不需要将业务对象的属性以字符串类型复制到表单对象中,只需处理无效提交或正确转换字符串。 相反,通常最好直接绑定到业务对象。

Spring的视图解析器非常灵活。 Controller通常负责准备带有数据的模型Map并选择视图名称,但它也可以直接写入响应流并完成请求。 通过文件扩展名或Accept头内容类型协商,通过bean名称,属性文件甚至自定义ViewResolver实现,可以高度配置视图名称解析。 模型(MVC中的M)是一个Map接口,它允许完全抽象视图技术。 可以直接与基于模板的渲染技术(如JSP,Velocity和Freemarker)集成,也可以直接生成XML,JSON,Atom和许多其他类型的内容。 模型Map简单地转换为适当的格式,例如JSP请求属性,Velocity模板模型。

1. Spring Web MVC特性

Spring的Web模块包含许多独特的Web支持功能:

  • 明确的角色分离。每个角色,如控制器、校验器、命令对象、表单对象、模型对象、DispatcherServlet、处理器映射,视图解析器等, 都可以用专门的对象来完成。
  • 像JavaBeans一样强大而直接地配置框架和应用程序类。此配置功能包括跨上下文轻松引用,例如从Web控制器到业务对象和校验器。
  • 适配性,非侵入性和灵活性。定义我们需要的任何控制器方法签名,可以使用以下参数注解之一(例如@RequestParam、@RequestHeader、@PathVariable等)。
  • 可重复使用的业务代码,无需重复。将现有业务对象用作命令或表单对象,而不是继承它们以扩展特定的框架基类。
  • 可定制的绑定和校验。类型不匹配作为应用程序级验证错误,这些错误会保留错误值、本地化日期和数字绑定等,而不是通过获取字符串形式的表单对象,再通过手动解析转换为业务对象。
  • 可定制的处理器映射和视图解析器。处理器映射和视图解析器策略的范围从简单的基于URL的配置到复杂的、专门的解析策略。 Spring比那些被授权特定技术的Web MVC框架更灵活。
  • 灵活的模型转移。具有 name/value Map的模型传输支持与任何视图技术轻松集成。
  • 可自定义的区域设置、时区和主题解析器,支持带或不带Spring标签库的JSP,支持JSTL,支持Velocity而无需额外的桥接等。
  • 一个简单但功能强大的JSP标签库,称为Spring标签库,为数据绑定和主题等功能提供支持。就标记代码方面而言,自定义标签有最大的灵活性。
  • Spring 2.0中引入的JSP表单标签库,使得在JSP页面中编写表单变得更加容易。
  • 生命周期范围限定为当前HTTP请求或HTTP会话的Bean。这不是Spring MVC本身的特定功能,而是Spring MVC使用的WebApplicationContext容器。

2. 集成其他MVC框架

如果不想使用Spring的Web MVC,但打算利用Spring提供的其他解决方案,可以轻松地将选择的Web MVC框架与Spring集成。只需通过其ContextLoaderListener启动Spring根应用程序上下文,并通过其ServletContext属性(或Spring的各自辅助方法)从任何操作对象中访问它。不涉及“插件”,因此不需要专门的集成。从Web层的角度来看,只需将Spring用作库,将根应用程序上下文实例作为入口点。

即使没有Spring的Web MVC,注册bean和Spring的服务也可以触手可及。在这种情况下,Spring不会与其他Web框架竞争。它简单地解决了纯web MVC框架没有的许多方面,从bean配置到数据访问和事务处理。因此,可以使用Spring中间层(或)数据访问层来丰富应用程序,即使只是想使用JDBC或Hibernate的事务抽象。

猜你喜欢

转载自blog.csdn.net/mytt_10566/article/details/84032117