1.SpringMVC 的⼯作原理/执⾏流程?
简单来说:客户端发送请求-> 前端控制器 DispatcherServlet 接受客户端请求 -> 找到处理器映射
HandlerMapping 解析请求对应的 Handler -> HandlerAdapter 会根据 Handler 来调⽤真正的处理器来处理请
求,并处理相应的业务逻辑 -> 处理器返回⼀个模型视图 ModelAndView -> 视图解析器进⾏解析 -> 返回⼀个视图
对象 -> 前端控制器 DispatcherServlet 渲染数据(Model)-> 将得到视图对象返回给⽤户。

上图⽤于辅助理解,⾯试时可⽤下列 8 步描述 SpringMVC 运⾏流程:
-
⽤户向服务器发送请求,请求被 Spring 前端控制Servelt DispatcherServlet 捕获;
-
DispatcherServlet 对请求 URL 进⾏解析,得到请求资源标识符(URI)。然后根据该 URI,调⽤ HandlerMapping 获得该 Handler 配置的所有相关的对象(包括 Handler 对象以及 Handler 对象对应的拦截 器),最后以 HandlerExecutionChain 对象的形式返回;
-
DispatcherServlet 根据获得的 Handler,选择⼀个合适的HandlerAdapter;(附注:如果成功获得 HandlerAdapter 后,此时将开始执⾏拦截器的 preHandler(...)⽅法)
-
提取 Request 中的模型数据,填充 Handler ⼊参,开始执⾏Handler(Controller)。在填充 Handler 的⼊参 过程中,根据你的配置,Spring 将帮你做⼀些额外的⼯作: (1)HttpMessageConveter:将请求消息(如:Json、xml 等数据)转换成⼀个对象,将对象转换为指定的响应 信息; (2)数据转换:对请求消息进⾏数据转换。如:String 转换成 Integer、Double 等; (3)数据格式化:对请求消息进⾏数据格式化。如:将字符串转换成格式化数字或格式化⽇期等;
-
Handler 执⾏完成后,向 DispatcherServlet 返回⼀个 ModelAndView 对象;
-
根据返回的 ModelAndView,选择⼀个适合的 ViewResolver(必须是已经注册到 Spring 容器中的 ViewResolver)返回给DispatcherServlet;
-
ViewResolver 结合 Model 和 View,来渲染视图;
-
将渲染结果返回给客户端。

浙公网安备 33010602011771号