1.用户向服务器发送请求,请求被SpringMVC前端控制器DispatcherServlet捕获。
2.DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI),判断请求URI对应的映射:
a.不存在
i.再次判断是否配置mvc:default-servlet-handler
ii:如果开启default-servlet-:会先交给DispatherServlet处理,处理不了交给default-servlet处理,404
细节:
开启了mvc:annotation-driven:先交给前端控制器处理,处理不了交给default-servlet处理。
没有开启mvc:annotation-driven:全部交给default-servlet处理。
iii:如果没有配置mvc:default-servlet-handler
前端控制器处理不了
b.存在执行下面的流程:
3.根据URI,调用HandlerMappring获得该Handler配置得所有相关的对象(包含Handler对象以及Handler对象对应的拦截器),最后HandlerExecutionChain执行链对象的形式返回。
4.DispatcherServlet根据获得的Handler,选择合适的HandlerAdapter。
5.如果成功获得HandlerAdapter,此时将开始执行拦截器的preHandler(...)方法【正向】
6.提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)方法,处理请求。在填充Handler的入参过程中,根据您的配置,Spring将帮你做一些额外的各种:
a) HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
b) 数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
c) 数据格式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
d) 数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
7.Handler执行完成后,向DispatcherServlet返回一个ModleAndView对象。
8.此时将开始执行拦截器的postHandle(...)方法【逆向】
9.根据返回的ModleAndView(此时会判断是否存在异常,如果存在异常,则执行HandlerExceptionResolver进行异常处理)选择一个合适的ViewResolver进行视图解析,根据Model和View,来渲染视图.
10.渲染视图完毕执行拦截器的afterCompletion(...)方法【逆向】
标签:请求,处理,SpringMVC,流程,default,Handler,执行,servlet From: https://www.cnblogs.com/topb3222/p/17650818.html