Spring MVC 的执行流程是怎样的?9 大核心组件是什么?

 2022-07-23
原文作者:追逐仰望星空

什么是SpringMVC?

Spring MVC是Spring提供的一个强大而灵活的web框架。借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简单。这些控制器一般不直接处理请求,而是将其委托给Spring上下文中的其他bean,通过Spring的依赖注入功能,这些bean被注入到控制器中。

Spring MVC主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成。他的两个核心是两个核心:

  • 处理器映射:选择使用哪个控制器来处理请求
  • 视图解析器:选择结果应该如何渲染

通过以上两点,Spring MVC保证了如何选择控制处理请求和如何选择视图展现输出之间的松耦合。

SpringMVC工作流程是什么?

当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。

202207231536364282.png

  • 1、DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。
  • 2、HandlerMapping为处理器映射。DispatcherServlet调用HandlerMapping,HandlerMapping根据请求url查找Handler。
  • 3、返回处理器执行链,根据url查找控制器,并且将解析后的信息传递给DispatcherServlet
  • 4、HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。
  • 5、执行handler找到具体的处理器
  • 6、Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。
  • 7、HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。
  • 8、DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。
  • 9、视图解析器将解析的逻辑视图名传给DispatcherServlet。
  • 10、DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图,进行试图渲染
  • 11、将响应数据返回给客户端

SpringMVC的九大组件有哪些?

  • 1、HandlerMapping

根据request找到相应的处理器。因为Handler(Controller)有两种形式,一种是基于类的Handler,另一种是基于Method的Handler(也就是我们常用的)

  • 2、HandlerAdapter

调用Handler的适配器。如果把Handler(Controller)当做工具的话,那么HandlerAdapter就相当于干活的工人

  • 3、HandlerExceptionResolver

  • 对异常的处理

  • 4、ViewResolver

用来将String类型的视图名和Locale解析为View类型的视图

  • 5、RequestToViewNameTranslator

有的Handler(Controller)处理完后没有设置返回类型,比如是void方法,这是就需要从request中获取viewName

  • 6、LocaleResolver

从request中解析出Locale。Locale表示一个区域,比如zh-cn,对不同的区域的用户,显示不同的结果,这就是i18n(SpringMVC中有具体的拦截器LocaleChangeInterceptor)

  • 7、ThemeResolver

主题解析,这种类似于我们手机更换主题,不同的UI,css等

  • 8、MultipartResolver

处理上传请求,将普通的request封装成
MultipartHttpServletRequest

  • 9、FlashMapManager

用于管理FlashMap,FlashMap用于在redirect重定向中传递参数

Spring、SpringMVC、SpringBoot的区别是什么?

spring和springmvc:

  1. spring是一个一站式的轻量级的java开发框架,核心是控制反转(IOC)和面向切面(AOP),针对于开发的WEB层(springMvc)、业务层(Ioc)、持久层(jdbcTemplate)等都提供了多种配置解决方案;
  2. springMvc是spring基础之上的一个MVC框架,主要处理web开发的路径映射和视图渲染,属于spring框架中WEB层开发的一部分;

springMvc和springBoot:

1、springMvc属于一个企业WEB开发的MVC框架,涵盖面包括前端视图开发、文件配置、后台接口逻辑开发等,XML、config等配置相对比较繁琐复杂;

2、springBoot框架相对于springMvc框架来说,更专注于开发微服务后台接口,不开发前端视图,同时遵循默认优于配置,简化了插件配置流程,不需要配置xml,相对springmvc,大大简化了配置流程;

总结:

1、Spring 框架就像一个家族,有众多衍生产品例如 boot、security、jpa等等。但他们的基础都是Spring的ioc、aop等. ioc 提供了依赖注入的容器, aop解决了面向横切面编程,然后在此两者的基础上实现了其他延伸产品的高级功能;

2、springMvc主要解决WEB开发的问题,是基于Servlet 的一个MVC框架,通过XML配置,统一开发前端视图和后端逻辑;

3、由于Spring的配置非常复杂,各种XML、JavaConfig、servlet处理起来比较繁琐,为了简化开发者的使用,从而创造性地推出了springBoot框架,默认优于配置,简化了springMvc的配置流程;但区别于springMvc的是,springBoot专注于单体微服务接口开发,和前端解耦,虽然springBoot也可以做成springMvc前后台一起开发,但是这就有点不符合springBoot框架的初衷了。