SpringMVC的完整执行流程

Java知识点总结:想看的可以从这里进入

2.5、SpringMVC流程

Spring MVC 框架主要由 DispatcherServlet、处理器映射、控制器、视图解析器、视图等组成,它和其他的MVC框架一样,以请求为驱动,围绕Servlet分派请求和提供功能,DispatcherServlet就是一个实际的Servlet(底层继承HttpServlet)。

根据 DispatcherServlet 内部方法及其各组件总结SpringMVC的流程:

image-20210803171626561

  1. 客户端发送一个请求到前端控制器DispatcherServlet。

  2. 前端控制器DispatcherServlet 会对请求URL进行解析,得到请求资源标识符(URI),然后进行判断

    • 若映射不存在

      1. 再判断是否配置了 mvc:default-servlet-handler 静态资源处理,没有配置就出现 404错误
      2. 如果配置了 mvc:default-servlet-handler 静态资源处理,则进行访问静态资源,如果还没有找到,出现404
    • 映射存在,会调用映射器HandlerMapping来进行映射处理,根据请求路径查找相应的Handler对象(处理器)。

  3. 映射器HandlerMapping找到对应的Handler之后,返回该Handler配置的所有相关的对象,即处理器+拦截器组成的 执行链,最后以 HandlerExecutionChain 执行链对象返回给DispatcherServlet

  4. DispatcherServlet 接收到执行链之后,调用HandlerAdapter适配器去执行相应的Handler,适配器准备参数和环境后,调用Handler,开始处理业务逻辑。此时将开始执行拦截器的 preHandler(…)方法【正向顺序执行】

  5. 先开始提取Request中的模型数据,然后 执行Controller 方法内的业务逻辑,开始处理请求,这期间会根据消息转换机制中的顺序对传递的数据进行校验

    • 数据类型转换:对请求消息进行数据转换。将请求中的参数转换为控制器方法指定的数据类型,然后再将转换后的参数值传递给控制器方法的形参。
    • 数据格式化:对请求消息进行数据格式化,将数据转换成指定的格式(如:金钱¥100000、日期yyyy-MM-dd 等)
    • 数据验证:主要验证数据是否合法,验证结果存储到BindingResult或Error中
  6. Handler 执行完成后会得到一个ModelAndView,并将其返回给DispatcherServlet。此时将开始执行拦截器的postHandle(…)方法【逆向顺序执行】。

  7. DispatcherServlet 接收到ModelAndView之后,调用视图解析器ViewResoler进行视图解析。视图解析器根据逻辑视图名找到真正的View视图,解析后返回给DispatcherServlet。

  8. DispatcherServlet 接收到视图之后,会根据ModelAndView中的model(数据)进行视图渲染。此时执行拦截器的afterCompletion(…)方法【逆向顺序执行】。

  9. 最后将渲染完成的最终的HTML页面,响应给客户端用户。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辰 羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值