MVC,全称是 Model-View-Controller(模型-视图-控制器),它是一种设计的规范,是一种架构的模式,广泛的应用于各类语言的开发。
Model模型:提供数据和行为
View视图:一般就是界面,即jsp、html等,作用是与用户进行交互,展示数据
Controller控制器:接收用户请求,交给业务层处理,再把处理后的模型数据响应给视图,即Servlet、Controller
还记得我们学习WEB开发的时吗,它整体的流程就是用户通过客户端发送请求到服务器,然后服务器根据请求中的数据判断要用那个Servlet处理,servlet再调用service处理业务逻辑,service需要什么数据就用dao去数据库获取,最后servlet再将数据响应回前端,这就是 web的基本流程,而MVC 就相当于把这一些流程按照业务逻辑、数据、显示 等等按照一定的规则进行分离,从而达到降低了业务逻辑和视图之间的双向耦合。
MVC的形成历程:
最早使用response一行一行将HTML标签等内容输出到浏览器中,这太费力
Model1:后来使用 jsp+JavaBean结合,好了很多,解决了HTML无法动态显示等问题,但模块之间耦合性强,代码重复难以复用,前后端互相依赖,无法独立测试。
jsp需要获取请求,处理跳转显示、还要连接数据等等,结构很乱,如果大量的jsp之间互相调用,想想就害怕。
Modle2:后面产生了基于 Servlet 的 MVC 模式:Java Bean(Model)+JSP(View)+Servlet(Controller)
增加了servlet层(负责获取用户请求, 连接模型层和视图层, 对整个业务流程进行控制,调用JavaBean封装处理数据,调用JSP显示页面),使得前后端有一定的分离,而且后端的大量代码可以复用。
JSP只负责展示/响应对请求处理的结果
JavaBean:封装数据、访问数据库
这一时期很多经典框架也随之产生,Struts1/2、Hibernate都能,但是随着手机、平台等兴起,前后端的数据大多需要JSON格式,对于JSP的依赖大大降低,所以这种模式也渐渐被取代
MVC:Model-View-Controller结构形成
SpringMVC是Spring的一个子项目,是 Spring 为表述层开发提供的一整套完备的解决方案。
SpringMVC架构:随着NoSQL、mybatis等兴起,Modle2的结构慢慢的不再那么好用,这是SpringMVC开始取代之前的框架成为主流,它的特色是结构更加松散,可以使用各种视图:JSP、HTML、JSON、PDF等,可以满足电脑、手机、平台各类需求,它可以在service层使用事务、还能访问NoSQL,所以SpringMVC逐渐成为主流的MVC框架。
它是基于MVC设计模式的轻量级框架,是 Spring 框架提供的轻量级 Web 开发框架,是 Spring 为表示层(UI)开发提供的一整套完备的解决方案,其核心在于流程控制,它基于 Servlet技术,提供了DispatcherServlet最为核心控制器,``SpringMVC就是围绕DispatcherServlet而展开的
,另外又指定了狠多不同结构,以适应各方面的需求。
组件 | 描述 |
---|---|
DispatcherServlet | 前端控制器,Spring MVC 流程控制中心,本质就是一个 Servlet,负责将所有的请求进行统一分发,对各个组件进行统一调度 |
HandlerMapping | 处理器映射器,根据请求的 url、method 等信息查找相应的 Handler。 |
Handler | 处理器,也就是 Controller(控制器)。它可以在 DispatcherServlet 的控制下,对具体的用户请求进行处理。 |
HandlerAdapter | 处理器适配器,负责调用具体的控制器方法,对用户发来的请求来进行处理。 |
ViewResolver | 视图解析器,其职责是对视图进行解析,通过 ModelAndView 对象中的 View 信息对逻辑视图名进行解析,将其解析成真正的视图 View |
View | 视图,它作用是将模型(Model)数据通过页面展示给用户。(这个是开发人员提供) |
优点:Spring MVC 是 Spring 家族的一员,可以与 IoC 容器等 Spring 基础设施无缝对接,且支持各种视图技术(JSP、Thymeleaf、 HTML、FreeMaker等等 ) ,各个结构松散,组件化程度高,可插拔式组件即插即用,想要使用什么功能,配置相应组件即可,尤其适合现代大型、超大型互联网项目的开发。