什么是 SpringMVC?工作流程是什么?九大组件有哪些?
什么是 SpringMVC?
Spring MVC 是 Spring 提供的一个强大而灵活的 web 框架。借助于注解,Spring MVC 提供了几乎是 POJO 的开发模式,使得控制器的开发和测试更加简单。这些控制器一般不直接处理请求,而是将其委托给 Spring 上下文中的其他 bean,通过 Spring 的依赖注入功能,这些 bean 被注入到控制器中。
Spring MVC 主要由 DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成。他的两个核心是两个核心:
处理器映射:选择使用哪个控制器来处理请求
视图解析器:选择结果应该如何渲染
通过以上两点,Spring MVC 保证了如何选择控制处理请求和如何选择视图展现输出之间的松耦合。
SpringMVC 工作流程是什么?
当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。
编辑切换为居中
添加图片注释,不超过 140 字(可选)
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:
spring 是一个一站式的轻量级的 java 开发框架,核心是控制反转(IOC)和面向切面(AOP),针对于开发的 WEB 层(springMvc)、业务层(Ioc)、持久层(jdbcTemplate)等都提供了多种配置解决方案;
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 框架的初衷了。
评论