MVC简介
MVC 是一种非常常见且常用的分层架构,主要包括;M - mode 对象层,封装到 domain 里。V - view 展示层,但因为目前都是前后端分离的项目,几乎不会在后端项目里写 JSP 文件了。C - Controller 控制层,对外提供接口实现类。DAO 算是单独拿出来用户处理数据库操作的层。
MVC优点
1. 耦合性低
2. 重用性高
3. 生命周期成本低
MVC缺点
1. 视图与控制器间的过于紧密的连接并且降低了视图对模型数据的访问
2. 增加系统结构和实现的复杂性
SpringMVC
SpringMVC
是Spring
家族中的元老之一,它是一个基于MVC
三层架构模式的Web
应用框架,它的出现也一统了JavaWEB
应用开发的项目结构,从而避免将所有业务代码都糅合在同一个包下的复杂情况。同时它还支持RESTful 编程风格的请求。。在该框架中通过把Model、View、Controller
分离,如下:
M/Model
模型:由service、dao、entity
等JavaBean
构成,主要负责业务逻辑处理。V/View
视图:负责向用户进行界面的展示,由jsp、html、ftl....
等组成。C/Controller
控制器:主要负责接收请求、调用业务服务、根据结果派发页面。
运行流程
- 用户发送请求至会先进入
DispatcherServlet
控制器进行相应处理。 DispatcherServlet
会调用HandlerMapping
根据请求路径查找Handler
。- 处理器映射器找到具体的处理器后,生成
Handler
对象及Handler
拦截器(如果有则生成),然后返回给DispatcherServlet
。 DispatcherServlet
紧接着会调用HandlerAdapter
,准备执行Handler
。HandlerAdapter
底层会利用反射机制,对前面生成的Handler
对象进行执行。- 执行完对应的
Java
方法后,HandlerAdapter
会得到一个ModelAndView
对象。 HandlerAdapter
将ModelAndView
再返回给DispatcherServlet
控制器。DisPatcherServlet
再调用ViewReslover
,并将ModelAndView
传递给它。ViewReslover
视图解析器开始解析ModelAndView
并返回解析出的View
视图。- 解析出
View
视图后,对视图进行数据渲染(即将模型数据填充至视图中)。 DispatcherServlet
最终将渲染好的View
视图响应给用户浏览器。
SpringMVC 的优势
1. 清晰的角色划分: 前端控制器(DispatcherServlet) 请求到处理器映射(HandlerMapping) 处理器适配器(HandlerAdapter) 视图解析器(ViewResolver) 处理器或页面控制器(Controller) 验证器( Validator) 命令对象(Command 请求参数绑定到的对象就叫命令对象) 表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)。
2.分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要。
3. 生态环境好,和 Spring 其他框架无缝集成,是其它 Web 框架所不具备的。