SpringMVC框架通过实现Model-View-Controller(MVC)模式来很好地将数据、业务与展现进行分离
SpringMVC框架和Struts、Struts2非常类似
SpringMVC的设计是围绕DispatcherServlet(前端控制器)展开的
- 负责将请求派发到特定的handler(处理程序)
- 给处理程序分派请求,执行视图解析,处理语言环境和主题解析,支持上传文件
- 通过映射来决定哪一个处理程序应当处理传入的请求
- 通过可配的handler mappings、view resolution、locale以及theme resolution来处理请求并且转到对应的视图。
SpringMVC,基于MVC架构模式的思想,将web层进行职责解耦
请求驱动类型是使用请求-响应模型,框架的目的就是帮助我们简化开发
清晰的角色划分,分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要:
- 前端控制器(DispatcherServlet)
- 请求到处理器映射(HandlerMapping)
- 处理器适配器(HandlerAdapter)
- 视图解析器(ViewResolver)
- 处理器或页面控制器(Controller)
- 验证器( Validator)
- 命令对象(Command请求参数绑定到的对象就叫命令对象)
- 表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)
- SpringMVC拥有强大的灵活性、非入侵性和可配置性
- SpringMVC提供了一个前端控制器DispatcherServlet,开发者无须额外开发控制器对象
- SpringMVC分工明确,包含控制器、验证器、命令对象、模型对象、处理程序映射视图解析器,等等,每一个功能实现由一个专门的对象负责完成
- SpringMVC可以自动绑定用户输入,并正确地转换数据类型。例如:SpringMVC能自动解析字符串,并将其设置为模型的int或float类型的属性
- SpringMVC使用一个名称/值的Map对象实现更加灵活的模型数据传输
- SpringMVC内置了常见的校验器,可以校验用户输入,如果校验不通过,则重定向回输入表单。输入校验是可选的,并且支持编程方式及声明方式
- SpringMVC支持国际化,支持根据用户区域显示多国语言,并且国际化的配置非常简单
- SpringMVC支持多种视图技术,最常见的有JSP技术以及其他技术,包括Velocity和FreeMarker
- SpringMVC提供了一个简单而强大的JSP标签库,支持数据绑定功能,使得编写JSP页面更加容易
- SpringMVC属于Spring框架的子项目,比起其他轻量级WEB框架最大的优势:与Spring框架无缝集成
- DispatcherServlet:前端控制器
用户请求到达前端控制器,它就相当于MVC模式中的Controller
虽然实际应用中开发依旧需要开发业务自有的Controller层,但DispatcherServlet相当于一个总的入口
DispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,降低组件之间的耦合性
- HandlerMapping:处理器映射器
HandlerMapping负责根据用户请求找到Handler即处理器
SpringMVC框架提供了不同的映射器实现不同的映射方式
例如:配置文件方式,实现接口方式,注解方式等
- Handler:处理器
Handler是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理
Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler(也就是我们实际开发的Controller)
- HandlAdapter:处理器适配器
通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行
- View Resolver:视图解析器
View Resolver负责将处理结果生成View视图
View Resolver根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象
对View进行渲染将处理结果通过页面展示给用户
- View:视图
SpringMVC框架提供了很多的View视图类型的支持
包括:jstlView、freemarkerView、pdfView等
我们最常用的视图就是jsp
通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要根据业务需求开发具体的页面
- 用户发送请求—>DispatcherServlet
前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制
- DispatcherServlet—>HandlerMapping
HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略
- DispatcherServlet—>HandlerAdapter
HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器
- HandlerAdapter—>处理器功能处理方法的调用
HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理
- 返回一个ModelAndView对象(Model模型数据)
包含模型数据、逻辑视图名
- ModelAndView的逻辑视图名—> ViewResolver
ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术
- View—>渲染
View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术
- 返回给DispatcherServlet
由DispatcherServlet返回响应给用户,到此一个流程结束