16
聊完了Spring,我们来看看Spring在web方面的应用Spring MVC。

MVC

首先我们来看什么是mvc?

大家知道在jsp里面也是可以写java代码的,但是如果我们这样做就会有一个问题,就是代码全部都杂糅在一起,无论是阅读还是修改都将变得十分的困难。

MVC是模型(model)-视图(view)-控制器(controller)的缩写,他将我们的程序分为个三部分,页面、控制层、模型层。这样使我们的程序的逻辑更清晰,更容易维护。

它以将我们的业务逻辑、数据与界面显示分离,将众多的业务逻辑聚集到一个部件里面,在需要改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑,提高编码效率。

Spring MVC

Spring MVC 是MVC结构在Spring框架中的一种表现形式。下面我们来看一下Spring MVC的结构:

Spring MVC

由图可知,Spring MVC的具体流程如下:
1. 首先用户发送请求————>前端控制器(DispatcherServlet),前端控制器根据请求信息(如URL)来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑部分;

2. 页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,并进行验证。然后将命令对象委托给业务对象进行处理;处理完毕后返回一个ModelAndView(模型数据和逻辑视图名);

3. 前端控制器收回控制权,然后根据返回的逻辑视图名,选择相应的视图进行渲染(ViewResolver),并把模型数据传入以便视图渲染。

4. 前端控制器再次收回控制权,将响应返回给用户;

大家可以把这想象成自己去医院看病的流程,前端控制器(DispatcherServlet)在这里就相当于一个医院前台的作用,我们看病时首先需要先到前台挂号,然后根据病情被分配到不同的科室,看完病之后还要再到前台去付钱拿药。

Spring和Spring MVC容器之间的关系

我们理解了Spring和Spring MVC,这里我们讨论一下Spring容器和Spring MVC容器之间的关系
首先要说明的是:一个项目中,容器不一定只有一个。
Spring容器用于管理Spring中的Bean,而Spring MVC容器用于管理Spring MVC中的Bean。Spring是父容器,Spring MVC是其子容器。并且在Spring MVC子容器中注册的Bean可以引用Spring父容器中注册的Bean,但在Spring容器中注册的Bean却不能引用Spring MVC容器中注册的Bean。

这句话听起来有点绕,我们可以看一下下面这张图,大家可以吧spring容器中的bean理解为全局变量,吧spring MVC容器中的bean理解为局部变量。在方法体中可以访问局部变量和全局变量,但是在方法外,就只能访问全局变量,是不能访问局部变量的。
Spring和Spring MVC容器之间的关系

这里我们要区分一下哪些bean是需要被SpringMVC管理的,最主要就是控制器(Controller),因为它需要与前端控制器交互。其他的可以都交给spring的容器管理。

下一节我们来聊聊,Spring的进阶版Spring Boot。


不吃香菜
244 声望64 粉丝