SpringMVC请求流程
SpringMVC请求处理流程分析
Handler会做数据准备或数据模型或业务逻辑等等。
SpringMVC框架也是一个基于请求驱动的Web框架,并且使用了前端控制器模式(是用来提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理来进行设计,再根据请求映射规则分发给相应的页面控制器(动作/处理器)进行处理。首先让我们整体看一下SpringMVC处理请求的流程:
1、首先用户发送请求,请求被SpringMVC前端控制器(DispatherServlet)捕获;
2、前端控制器(DispatherServlet)对请求URL解析获取请求URI,根据URI,调用HandlerMapping;
3、前端控制器(DispatherServlet)获得返回的HandlerExecutionChain,(包括Handler对象以及Handler对象应用的拦截器);
4、DispatherServlet根据获得的HandlerExecutionChain,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法);
5、HandlerAdapter根据请求的Handler适配并执行对应的Handler;HandlerAdapter(提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。在填充Handler的入参过程中,根据配置,Spring将做一些额外的工作:
HttpMessageConveter:将请求消息(如Json、xml等数据)转换成一个对象,将对象转换成为指定的响应信息。
数据转换:对请求信息进行数据转换。如String转换成Integer、Double等数据格式化;
数据格式化:如将字符串转换成格式化数字或格式化日期等;
数据验证:验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中)
6、Handler执行完毕,返回一个ModelAndView(即模型和视图)给HandlerAdaptor;
7、HandlerAdaptor适配器将执行结果ModelAndView返回给前端控制器;
8、前端控制器接收到ModelAndView后,请求对应的视图解析器;
9、视图解析器解析ModelAndView后返回对应View;
10、渲染视图并返回渲染后的视图给前端控制器;
11、最终前端控制器将渲染后的页面响应给用户或客户端。