SpringMVC进阶

211 阅读1分钟

SpringMVC

1 SpringMVC的0xml配置原理

Servlet 3.0 版本提出了新规范SPI,通过根目录的 META-INF/services/javax.servlet.ServletContainerInitializer目录下建立一个文件

Spring 会在onStartup 启动传入一个Set集合,整合所有的需要被tomcat调用的方法

SpringMVC0xml

web容器(Tomcat、JBOSS、Jetty...)

ServletContext(web上下文) 支持web组件注册

web组件: filter、servlet、listener

DispatcherServlet 注册进servletContext

2 Spring MVC的执行流程

分析源码阅读流程:分析程序入口 DispatcherServlet继承自Servlet类 DispatcherServlet继承自FrameworkServlet 会调用doGet、doPost 发现会调用doService在doService中调用doDispatch() 程序入口为doDispatch()

DispatcherServlet拦截请求 :doDispatch() --->

  • checkMultipart(request) 检查是否有无附带文件

  • getHandler(processRequest) 分发请求

    1. Spring 扫描请求 定义Map集合
    2. 拿到所有加了@Controller注解的类
    3. 反射遍历类里边所有的方法对象
    4. 判断方法是否加了@RequestMapping注解
    5. 把@RequestMapping注解的value 作为map集合的Key给put进去
    6. 根据用户发送的请求,拿到请求中的URI (url:http://localhost:8080/test.do uri:/test.do )
    7. 使用uri作为map的Key 去map中获取对应的方法
  • HaddlerMapping 处理映射器 获取对应请求

  • HaddlerAdapter 适配器

    controller 定义

    二种类型

    1. BeanName
    2. @Controller

    三种实现

    1. @Controller
    2. implements HttpRequestHandler
    3. implements Controllter
  • 调用Handler

    获取参数 argumentResolvers 参数处理器 判断需要调用哪个参数处理器

    自定义参数处理器

    在这里插入图片描述

  • 返回ModeAndView对象

  • ViewResolver视图解析器

    DispatcherServlet调用ViewResolver通过视图名称查找视图 返回正确的视图

  • 进行视图渲染