SpringMVC的执行流程
前后端分离架构:【接口开发、异步】
请求到DisPatcherServlet,首先由tomcat的连接器监听到请求,处理参数给容器,通过映射一级级找到dispatcherServlet
用户发送的请求统一由前端控制器(DispatcherServlet统一拦截),交给处理器映射器
处理器映射器维护了一个map,前端控制器将url传给它,在map里面找到对应的类名和方法名
【处理器映射器负责将请求映射到对应的处理器(Controller方法),存放在一个map中】
找到了之后将方法名和handler封装为处理器执行链给前端控制器
前端控制器知道了这个请求的方法,直接将请求交给处理器适配器,作用是完成参数的转换。
【解析参数,因为每个请求,参数类型不一样,有基基本类型、引用类型、路径参数等等…】,处理器适配器处理好了参数之后,再将请求发给处理器Handler
【一般对应的controller都有@ResponseBody注解,将方法的返回值转换为JSON并响应】
直接将JSON响应结果作为response返回回去,涉及Tomcat的工作原理...
处理器执行链包括了哪些东西?
处理器对象:即具体的 Controller 类中的处理器方法。
拦截器(Interceptor):处理器拦截器可以在处理器方法执行前、执行后,或之前和之后执行一些共同的逻辑,比如权限验证、日志记录等。
处理器方法:即处理请求的具体方法。
当请求到达前端控制器(DispatcherServlet)后,前端控制器会通过处理器映射器找到对应的处理器,并返回一个处理器执行链,包括了以上所述的元素。处理器执行链将负责依次执行处理器拦截器的前置处理、处理器方法的执行以及处理器拦截器的后置处理。
拦截器的作用:
处理器拦截器与处理器执行链密切相关,处理器执行链中的处理器拦截器可以在请求进入处理器方法之前和处理器方法执行之后实施拦截逻辑。通过处理器拦截器,我们可以实现一些通用的逻辑,而不需要在每个处理器方法中重复编写。
处理器执行链中包含了处理器对象和处理器方法【包含了具体的执行逻辑】,那为什么还要最终交给处理器Handler来执行处理器方法?
处理器适配器的作用是将处理器对象(Controller)转换为处理器(Handler)的形式,然后执行其中的方法以处理请求。处理器适配器知道如何调用不同类型的处理器对象,并处理返回值以生成最终的响应给前端控制器。处理器适配器中主要是进行参数类型的转换。
因此,虽然处理器执行链中包含了处理器方法,但最终还需要通过调用处理器对象和处理器适配器来执行具体的处理器方法,从而完成请求的处理过程。