原文:
https://blog.csdn.net/floating_dreaming/article/details/89089214
一.SpringMVC的简介:
SpringMVC属于SpringFrameWork的后续产品,Spring 框架提供了机构web应用程序的全功能MVC模块,SpringMVC 是一种web层的mvc框架。
二.SpringMvc的工作流程:
讲解:
- 1.用户发送请求至前端控制器 DispatcherServlet
- 2.DispatcherServlet 收到请求调用HandlerMapping 处理器映射器。
- 3.处理器映射器(HandlerMapping)找到具体的处理器(可以根据xml配置,注解进行查找),生成代理器对象及处理器拦截器(如果有则生成),一并返回给DispatcherServlet
- 4. DispatcherServlet 调用handlerAdapter 处理器适配器。
- 5.HandlerAdapter经过适配调用 具体的处理器(Controller) 也叫后端控制器。
- 6.Controller 执行完成返回ModelAndView。
- 7.HandlerAdapter 将controller执行结果 ModelAndView 返回给DispatcherServlet.
- 8.DispatcherServlet 将ModelAndView 传给ViewReslover 视图解析器。
- 9.ViewReslover 解析后返回具体View
- 10.DispatcherServlet 根据View 进行渲染视图(即将模型数据填充至视图中)
- 11.DispatcherServlet 响应用户。
三.为什么要用SpringMVC?
SpringMVC 是一种基于Java,实现了Web MVC 设计模式,请求驱动类型的轻量级Web框架。将Web层进行职责解耦。
基于请求驱动指的就是使用请求-响应 模型。框架的目的就是帮助我们简化开发。
四.什么是MVC 设计模式?
MVC 即Model-view-Controller ,将应用按照Model(模型).View(视图) ,Controller(控制)这样的方式分离。
视图(View): 代表用户交互页面,对于Web应用来说,可以是Html 也就是jsp等。一个应用可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理以及用户的请求,而不包括在视图上的业务流程的处理,业务流程的处理交予模型(Model) 处理。
模型(Model): 是业务的处理以及业务规则的制定。模型接收视图请求的数据,并返回最终的处理结果。业务模型的设计师MVC最重要的核心。
控制(Controller) : 可以理解为从用户接收请求,将模型与视图匹配在一起,共同完成用户的请求,划分控制层的作用很明显,它清楚的告诉你 ,控制就是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求,控制层并不做任何的数据处理。
五. SpringMVC的特点
- 清晰的角色划分:
控制器(Controller) .验证器(Validator) .命令对象(command object). 表单对象(formobject)、模型对象(model object)、 Servlet分发器(DispatcherServlet)、处理器映射(handler mapping)、视图解析器(view resolver)等。
每一个角色都可以由一个专门的对象来实现
- 强大而直接的配置方式:
将框架类和应用程序类都能作为JavaBean配置,支持跨多个context的引用。
例如:在web控制器中对业务对象和验证器(validator)的引用。
- 可适配、非侵入:
可以根据不同的应用场景,选择合适的控制器子类 。
(simple型、command型、form型、wizard型、multi-action型或者自定义),而不是从单一控制器 (比如Action/ActionForm)继承。
- 简单而强大的JSP标签库(SpringTag Library):
支持包括诸如数据绑定和主题(theme) 之类的许多功能。
等等。。。。。
六.SpringMVC 的优点:
- 让我们能非常简单的设计出干净的Web层和薄薄的Web层
- 进行更简洁的Web层的开发
- 天生与Spring框架集成(如IoC容器、AOP等)
- 提供强大的约定大于配置的契约式编程支持
- 非常灵活的数据验证、格式化和数据绑定机制
- 支持Restful风格
七.SpringMVC和Struts2的对比:
1.框架机制: SpringMVC的入口是servlet ,而Struts是filter。
(Filter 在容器启动后就初始化,服务停止后销毁,晚于Servlet,而Servlet 是在调用时初始化,先 于Filter调用,服 务停止后销毁)
2.拦截机制:
Struts2 : Struts2框架是类级别的拦截,每次请求就会创建一个Action,通过getter setter 把request 数据注入到属性。
SpringMVC:SpringMVC 是方法级别的拦截,一个方法对应一个Request上下文,所以方法直接基本上是独立的,独享request response 数据,
3.性能方面:
SpringMVC实现了零配置,由于SpringMVC基于方法的拦截,有加载一次单例模式bean注入。而Struts2是类级别的拦截,每次请求对应实例一个新的Action,需要加载所有的属性值注入,所以,SpringMVC开发效率和性能高于Struts2。
4.设计思想:
Struts2 更加符合OOP的编程思想,SpringMVC比较谨慎,在Servlet上扩展。