SpringMVC的执行流程要分两阶段讲
- 视图阶段(老旧JSP等)
- 前后端分离阶段(接口开发,异步)
视图阶段
假设我们现在有一个请求 http://localhost:8080/user/getById/1 ,请求从浏览器发出,在后台就会有一个 前端控制器DispatcherServlet 来接收请求,它是调度中心,所有的请求都要经过这个DispatcherServlet,它是由Tomcat容器进行初始化的,当这个类被加载的时候,在内部就会加载出其他组件 处理器映射器HandlerMapping、处理器适配器HandlerAdaptor、视图解析器ViewResolver
DispatcherServlet 会到 处理器映射器中查询handler,处理器映射器内存储的就是路径与handler的对应关系,handler 简单讲就是某个Controller的某个方法,第3步中返回的并不是单纯的handler,而是处理器执行链,因为要考虑到拦截器的存在
为什么有 处理器Handler 后还要一个 处理器适配器HandlerAdaptor,处理器适配器的作用是处理各式各样的参数和返回值,从而让处理器能够运行,之后返回ModelAndView给前端控制器
视图解析器将逻辑视图ModelAndView解析为真正的视图,返回 View对象 给前端控制器
整体过程:
用户发送出请求到前端控制器DispatcherServlet
DispatcherServlet收到请求调用HandlerMapping(处理器映射器)
HandlerMapping找到具体的处理器,生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet
DispatcherServlet调用HandlerAdapter(处理器适配器)
HandlerAdapter经过适配调用具体的处理器(Handler/Controller)
Controller执行完成返回ModelAndView对象
HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet
DispatcherServlet将ModelAndView传给ViewReslover(视图解析器)
ViewReslover解析后返回具体View(视图)
DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)
DispatcherServlet响应用户
现如今的开发都是 接口开发,不返回视图,而是json,那么SpringMVC的执行流程又是怎样的?
前后端分离阶段(接口开发,异步请求)
具体细节不再说明
整体的过程如下:
用户发送出请求到前端控制器DispatcherServlet
DispatcherServlet收到请求调用HandlerMapping(处理器映射器)
HandlerMapping找到具体的处理器,生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet。
DispatcherServlet调用HandlerAdapter(处理器适配器)
HandlerAdapter经过适配调用具体的处理器(Handler/Controller)
方法上添加了@ResponseBody
通过HttpMessageConverter来返回结果转换为JSON并响应