什么是 Spring MVC?
Spring MVC 是 Spring 框架提供的一个基于 MVC 模式的轻量级 Web 框架,是 Spring 为表示层开发提供的一整套完整的解决方案,Spring MVC 使用了 MVC 架构模式,将 Web 层职责解耦,基于请求驱动模型,简化了 Web 应用程序的开发过程。
什么是 MVC?
MVC 是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范,是一种架构设计模式,MVC 模式降低了视图和与业务逻辑的耦合。
- 模型(Model):数据模型,提供要展示的数据,包含数据的查询和组装。
- 视图(View):负责进行模型的展示,就是我们通过界面可以看到的界面。
- 控制器(Controller):接受用户请求,委托给模型处理,模型处理完数据返回给视图,由视图进行展示,控制器可以理解为一个控制中心、调度员的角色。
Spring MVC 的特点?
- 轻量级、简单易学习,使开发人员能够快速开发出高质量的Web应用程序。
- 可维护性,Spring MVC 框架采用了 MVC 设计模式,将模型、视图、控制器进行了分离,使得代码更加清晰、易于维护。
- 灵活,Spring MVC 框架对于多种数据源和视图技术提供了支持,如JSP、Velocity、Freemarker等,可以让使用者灵活的选择技术方案。
- 可扩展,Spring MVC 框架提供了很多扩展点,开发人员可以利用这些扩展点去扩展自己需要的功能,如可以自定义视图解析器、拦截器等。
- 易于集成,Spring MVC 可以与 Spring 无缝集成,可以提升开发效率。
- 灵活的URL映射,支持多种处理器映射方式,如基于注解的映射和基于URL映射的映射。
- 单元测试,Spring MVC提供了强大的约定大于配置的契约式编程支持,以及简单的web层单元测试。
- 支持国际化,可以根据用户区域显示多国语言。
- 高效,Spring MVC 框架具有高效的处理请求和响应的能力。
Spring MVC 的核心组件?
- DispatcherServlet(前端控制器):DispatcherServlet 是 Spring MVC 的核心,即是整个请求处理流程的入口,也贯穿这个流程,负责协调各个组件的工作,是一个中心控制器的作用。
- HandlerMapping(处理器映射器):HandlerMapping 主要是将客户端的请求映射到具体的处理程序上,也就是帮助找到具体 Controller,一般会根据请求的 url 及类型,来找到具体的处理器。
- HandlerAdapter(处理器适配器):HandlerAdapter 负责适配不同类型的处理程序,匹配到具体的 Handler。
- Controller(控制器):Controller 负责处理客户端的请求并响应,它通常包含一些处理方法,这些处理方法被称为 Handler。
- ModelAndView(模型和视图):ModelAndView 是一个持有模型数据和视图信息的容器对象,它将处理的模型数据和视图名称封装在一起传递给 DispatcherServlet。
- ViewResolver(视图解析器):ViewResolver 负责将逻辑视图解析为具体的视图对象,并返回给 DispatcherServlet。
- View(视图):它负责将模型数据渲染为最终结果,View 通常是一个 JSP 页面、FreeMarker 模板、Thymeleaf 模板或其他类型的模板文件,View 负责将模型数据填充到模板中,并生成最终的 HTML、XML、JSON 等格式的响应。
Spring MVC 的工作流程?
- 客户端发送请求到前端控制器 DispatcherServlet。
- 前端控制器 DispatcherServlet 收到请求后,寻找处理器映射器 HandlerMapping 处理。
- 处理器映射器 HandlerMapping 根据请求 url 找到具体的处理器 Handler,生成处理器映射器对象及处理器拦截器一并返回给前端控制器 DispatcherServlet。
- 前端控制器 DispatcherServlet 调用处理器适配器 HandlerAdapter,处理器适配器 HandlerAdapter 经过适配调用具体的处理器 Handler(Controller)。
- Controller 调用 Service 完成业务逻辑处理,返回 ModelAndView。
- DispatcherServlet 将 ModelAndView 传递给 ViewReslover。
- ViewReslover 解析出具体的 View。
- DispatcherServlet 根据具体的 View 渲染视图并返回给客户端。
Spring MVC 工作流程简图
简单的画了一个 Spring MVC 的工作流程,希望可以加深记忆。
欢迎提出建议及对错误的地方指出纠正。