Spring MVC 的执行流程以及运行原理

一.什么是 MVC?

MVC 是 Model 、 View 和 Controller 的缩写,分别代表 Web 应用程序中的 3 种职责, MVC
是一种软件设计规范。它将业务逻辑、数据、显示分离的方法来组织代码,降低了视图与业
务逻辑之间的双向耦合。
Model( 模型 ) :数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型
或 JavaBean 组件(包含数据和行为),不过现在一般都分离开来: Value Object (数据 Dao )
和 服务层(行为 Service )。也就是模型提供了模型数据查询和模型数据的状态更新等功能,
包括数据和业务。
View( 视图 ) :负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。
Controller( 控制器 ) :接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回
的模型数据返回给视图,由视图负责展示。也就是说控制器做了个调度员的工作。
最典型的 MVC 模式就是 JSP+Servlet+JavaBean 的模式。

二.什么是 Spring MVC?

Spring MVC 是一个基于 MVC 模式的 Web 框架,是 Spring 框架的一个模块。
它以 Spring IOC 容器为基础,并利用容器的特性来简化它的配置,所以 Spring MVC 和 Spring
可直接整合使用。
Spring MVC 对 MVC 流程进行了封装,屏蔽掉很多底层代码,让开发者可以更加轻松快捷 的完成基于 MVC 模式的 Web 开发。
总的来说: Spring MVC 是 Spring Framework 的一部分,是基于 Java 实现 MVC 的轻量级 Web
框架。
Spring MVC 的特点:
是 Spring 框架的一部分,可以方便的利用 Spring 所提供的其他功能。
灵活性强,易于与其他框架集成。
提供了一个前端控制器 DispatcherServlet ,使开发人员无需额外开发控制器对象。
可自动绑定用户输入,并能正确的转换数据类型。
内置了常见的校验器,可以校验用户输入。如果校验不能通过,那么就会重定向到输入表单。
支持国际化。可以根据用户区域显示多国语言。
支持多种视图技术。它支持 JSP 、 Velocity 和 FreeMarker 等视图技术。
使用基于 XML 的配置文件,在编辑后,不需要重新编译应用程序。

三.SpringMVC 中的核心组件

1 )前端控制器( DispactherServlet ):接收请求、响应结果,相当于转发器,它是 SpringMVC
框架最核心的组件,有了它就能减少其他组件之间的耦合度。(不需要程序员开发)
2 )处理器映射器( HandlerMapping ):根据配置的映射规则(根据请求的 URL ),找到对
应的处理器。(不需要程序员开发)
3 )处理器适配器( HandlerAdapter ):适配调用具体的处理器,并且执行处理器中处理请求
的方法,执行完毕之后返回一个 ModelAndView 对象。
4 )处理器( Handler ):(需要程序员手动开发)。
5 )视图解析器( ViewResolver ):会根据传递过来的 ModelAndView 对象进行视图解析,根
据视图解析名解析称真正的视图 View 。(不需要程序员开发)
6 )视图( View ): View 是一个接口,它的实现类支持不同类型的视图。比如: JSP 、 freemarker 、 Thymeleaf 等等。

四.Spring MVC 的执行流程


( 1 )当用户通过浏览器发起一个 HTTP 请求,请求直接到前端控制器 DispatcherServlet ;
( 2 )前端控制器接收到请求以后调用处理器映射器 HandlerMapping ,处理器映射器根据请
求的 URL 找到具体的 Handler ,并将它返回给前端控制器;
( 3 )前端控制器调用处理器适配器 HandlerAdapter 去适配调用 Handler ;
( 4 )处理器适配器会根据 Handler 去调用真正的处理器去处理请求,并且处理对应的业务
逻辑;
( 5 )当处理器处理完业务之后,会返回一个 ModelAndView 对象给处理器适配器,
HandlerAdapter 再将该对象返回给前端控制器;这里的 Model 是返回的数据对象, View 是
逻辑上的 View 。
( 6 )前端控制器 DispatcherServlet 将返回的 ModelAndView 对象传给视图解析器 ViewResolver
进行解析,解析完成之后就会返回一个具体的视图 View 给前端控制器。( ViewResolver 根
据逻辑的 View 查找具体的 View )
( 7 )前端控制器 DispatcherServlet 将具体的视图进行渲染,渲染完成之后响应给用户(浏
览器显示)。

五.关于 Spring MVC 常用部分注解解释

@SpringBootApplication 此 注 解 是 一 个 组 合 注 解 , 包 含 了 ( @Configuration ,
@EnableAutoConfiguration 和 @ComponentScan )三个重要注解的功能。其主要作用在于简化
启动类的编写,使得开发者可以快速搭建起一个基于 Spring 的应用程序框架。
@Component 标注在类上,表示将该类作为一个组件交给 Spring 容器管理。
@Controller 声明 Controller 组件,通常作用在控制层(如 Spring MVC 的 Controller ),用于将控制层的类标识为 Spring 中的 Bean ,其功能与 @Component 相同。
@Service 声明 Service 组件 @Service( " myMovieLister " ) ,通常作用在业务层( Service 层),用于将业务层的类标识为 Spring 中的 Bean ,其功能与 @Component 相同。
@Repository 声明 Dao 组件,将数据访问层( DAO 层)的类标识为 Spring 中的 Bean ,其 功能与 @Component 相同。
@Resource 用于注入,默认按名称装配, @Resource(name= " beanName " )
@Autowired 用于注入,默认按类型装配
@Transactional: 事务管理
@RequestBody :注解实现接收 http 请求的 json 数据,将 json 转换为 java 对象。
@ResponseBody :注解实现将 conreoller 方法返回对象转化为 json 对象响应给客户。
@Scope: Spring IOC 容器中的一个作用域,在 Spring IOC 容器中,他用来配置 Bean 实例的
作用域对象。
@RequestMapping("/menu") 请求映射,用于映射 url 到控制器类或一个特定的处理程序方法。
可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
@GetMapping :它是 @RequestMapping(method =RequestMethod.GET) 的一个快捷方式,只
能处理 Get 类型请求。
@PostMapping : 它是 @RequestMapping(method =RequestMethod.POST) 的一个快捷方式,
只能处理 Post 类型请求。
@RequestParam :从请求中提取查询参数

相关推荐
钮钴禄·爱因斯晨9 分钟前
深入理解 Java 内存区域与内存溢出异常
java·开发语言
北辰浮光20 分钟前
[SpringMVC]上手案例
java·开发语言
九转苍翎27 分钟前
Java虚拟机——JVM(Java Virtual Machine)解析二
java·jvm
AronTing32 分钟前
07-云原生安全深度剖析:从 Kubernetes 集群防护到微服务安全加固
spring·微服务·架构
顾林海39 分钟前
深度解析LinkedHashMap工作原理
android·java·面试
一路向北he1 小时前
杰理10k3950温度测量
java·数据结构·算法
K哥11251 小时前
【多线程】线程池
java·开发语言·线程池
LeicyII1 小时前
面试题:Eureka和Nocas的区别
java·云原生·eureka
SoFlu软件机器人1 小时前
高并发秒杀系统设计:关键技术解析与典型陷阱规避
java·人工智能