SpringMVC的工作流程解析
1. MVC概述
MVC是一种软件架构思想,将软件按模型、视图、控制器来划分,核心思想是通过将业务逻辑、数据、显示分离来组织代码。
Model(模型层):具体就是项目中的 JavaBean,作用是处理数据
View(视图层):具体指项目中的 html 或 jsp 页面,作用是和用户交互,展示数据
Controller(控制层):作用是接收请求和响应浏览器,如项目中的Servlet
按照业务逻辑,JavaBean分两类:
一类称为实体类Bean:专门存储业务数据的,如Student、User等
一类称为业务处理的Bean:指Service或 Dao 对象,专门用于处理业务逻辑和数据访问
1.1 MVC模式下的工作流程
用户通过视图层发送请求到服务器,在服务器中请求被Controller层接收,Controller调用相应的Model层处理请求,处理完毕将结果返回到Controller,Controller再根据请求处理的结果找到相应的View视图,渲染数据后最终响应给浏览器。
2. SpringMVC
2.1 概述
SpringMVC是一个基于Spring开发的MVC轻量级框架,是Spring3.0后发布的组件,SpringMVC和Spring可以无缝整合,使用DispatcherServlet作为前端控制器,且内部提供了处理器映射器、处理器适配器、视图解析器等组件,可以简化JavaBean封装,Json转化、文件上传等操作,其将web层进行解耦,并管理应用所需对象的生命周期,大大地简化了日常的开发。
Spring MVC 下,一般把后端项目分为 Service 层(处理业务)、Dao 层(数据库操作)、Entity 层(实体类)、Controller 层(控制层,返回数据给前台页面)。
简单总结:
SpringMVC 是 Spring 提供的一个实现了Web MVC 设计模式的轻量级 Web 框架。
MVC 是一种思想,而 Spring MVC 是对 MVC 思想的具体实现。
2.2 SpringMVC的核心组件
- DispatcherServlet:前置控制器,是整个流程控制的核心,用于控制其他组件的执行,进行统一调度,降低组件之间的耦合性,相当于总指挥。
- Handler:处理器,完成具体的业务逻辑,相当于 Servlet 或 Controller。
- HandlerMapping:处理器映射器,在DispatcherServlet 接收到请求之后,通过 HandlerMapping 将不同的请求映射到不同的 Handler。
- HandlerInterceptor:处理器拦截器,是一个接口,如果需要完成一些拦截处理,可以实现该接口。
- HandlerExecutionChain:处理器执行链,包括两部分内容:Handler 和 HandlerInterceptor(系统会有一个默认的 HandlerInterceptor,如果需要额外设置拦截,可以添加拦截器)。
- HandlerAdapter:处理器适配器,Handler 执行业务方法之前,需要进行一系列的操作,包括表单数据的验证、数据类型的转换、将表单数据封装到 JavaBean 等,这些操作都是由 HandlerApater 来完成,开发者只需将注意力集中业务逻辑的处理上,DispatcherServlet 通过 HandlerAdapter 执行不同的 Handler。
- ModelAndView:装载了模型数据和视图信息,作为 Handler 的处理结果,返回给 DispatcherServlet。
- ViewResolver:视图解析器,DispatcheServlet 通过它将逻辑视图解析为物理视图,最终将渲染结果响应给客户端。
2.3 SpringMVC的工作流程
- 客户端向服务端发送一次请求,这个请求会先到前端控制器 DispatcherServlet(也叫中央控制器)。
- DispatcherServlet 接收到请求后会调用 HandlerMapping 处理器映射器。由此得知,该请求该由哪个 Controller 来处理(并未调用 Controller,只是得知)
- DispatcherServlet 调用 HandlerAdapter 处理器适配器,告诉处理器适配器应该要去执行哪个 Controller
- HandlerAdapter 处理器适配器去执行 Controller 并得到 ModelAndView(数据和视图),并层层返回给 DispatcherServlet
- DispatcherServlet 将 ModelAndView 交给 ViewReslover 视图解析器解析,然后返回真正的视图。
- DispatcherServlet 将模型数据填充到视图中
- DispatcherServlet 将结果响应给客户端
2.4 SpringMVC的优点
① 基于原生的Servlet,通过了功能强大的前端控制器DispatcherServlet,对请求和响应进行统一处理
② 内部组件化程度高,可插拔式组件即插即用,想要什么功能配置相应组件即可(因为是基于Spring框架)
③ 代码清新简洁,大幅度提升开发效率
度高,可插拔式组件即插即用,想要什么功能配置相应组件即可(因为是基于Spring框架)
③ 代码清新简洁,大幅度提升开发效率