天天看点

springmvc执行原理(基于组件)

bilibili视频教程:https://www.bilibili.com/video/BV1mE411X7yp?p=165&spm_id_from=pageDriver

组件

springmvc是基于组件方式执行流程的、以下执行流程涉及到5大组件。

  1. 前端控制器DispatcherServlet

    是最重要的组件,作用相当于人的大脑

    ,用于接收请求、响应结果,相当于转发器,中央处理器,指挥着springmvc中的其他组件配合完成某个用户发来的请求。并且DispatcherServlet降低了组件之间的耦合性,就如人的大脑指挥着脚走路,嘴吃东西,眼睛看东西一样,脚嘴眼完全是不同的器官他们各自独立,互不影响。
  2. 处理器映射器HandlerMapping

    作用:根据请求的url查找Handler然后返回给DispatcherServlet控制器

    这个是根据用户请求的url找到Handler即处理器也就是我们编写的controller。

  3. 处理器适配器HandlerAdapter

    作用:用于执行HandlerMapping返回给DispatcherServlet控制器的处理器Handler的,执行完之后会返回一个ModelAndView给控制器。

  4. 处理器Handler

    也就是我们自己写的controller

  5. 视图解析器View resolver

    作用:进行视图解析,根据逻辑视图名解析成真正的视图(view)

  6. 视图View

    View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf…)

其中处理器Handler(Controller),视图View(JSP等)要我们自己编写。

前端控制器DispatcherServlet,在spring配置文件中配置InternalResourceViewResolver

处理器映射器HandlerMapping,处理器适配器HandlerAdapter在springmvc配置文件中开启注解

<mvc:annotation-driven> </mvc:annotation-driven>

就会自动配置好

执行原理(面试必问)

根据下图

springmvc执行原理(基于组件)
  1. 假如用户发送一个请求给我们用springmvc编写的系统、这时这个请求最先被前端控制器DispatcherServlet接收到。
  2. DispatcherServlet接收到请求后他自己不能处理这个请求他只能交给其他组件处理,他会首先找到请求的是哪个处理器也就是我们编写的Controller,这个时候就会调用处理器映射器HandlerMapping去查找是哪个处理器
  3. 找到之后返回给DispatcherServlet前端控制器
  4. 找到是哪个处理器之后就要执行这个处理器了,这时候就会将处理器交给处理器适配器HandlerAdapter执行
  5. Handler经过是配置器后执行
  6. Handler执行完之后会返回一个ModelAndView给处理适配器HandlerAdapte
  7. 适配器HandlerAdapte再返回给前端控制器DispatcherServlet
  8. 同样前端控制器DispatcherServlet无法处理ModelAndView这里就要交个视图解析去组件去处理了,
  9. 处理完之后会返回一个视图View给前端控制器DispatcherServlet。
  10. 前端控制器DispatcherServlet拿到View之后会交给组件视图View进行渲染,数据填充。
  11. 最终将渲染好的视图结果返回给用户。