美文网首页
5、springmvc启动过程分析

5、springmvc启动过程分析

作者: lois想当大佬 | 来源:发表于2020-04-23 18:29 被阅读0次

    一、基础概念
    Spring Web MVC 框架提供”模型-视图-控制器”( Model-View-Controller )架构和随时可用的组件,用于开发灵活且松散耦合的 Web 应用程序。

    springmvc的核心是DispatcherServlet,它是请求调度控制器,负责拦截客户端请求,根据url通过HandlerMapping找到对应的handler,通过HandlerAdapter根据handler匹配对应的controller,完成接口调用后返回model,然后通过ViewResolver渲染视图,最后DispatcherServlet响应用户请求。

    但是,对于目前主流的架构,前后端已经进行分离了,所以 Spring MVC 只负责 Model 和 Controller 两块,而将 View 移交给了前端。Handler(Controller) 执行完后,如果判断方法有 @ResponseBody 注解,则直接将结果写回给用户( 浏览器 )。

    随着 Spring Boot 逐步全面覆盖到我们的项目之中,我们已经基本忘却当年经典的 Servlet + Spring MVC 的组合,那让人熟悉的 web.xml 配置。而本文,我们想先抛开 Spring Boot 到一旁,回到从前,一起来看看 Servlet 是怎么和 Spring MVC 集成,怎么来初始化 Springmvc 容器的。

    二、分析springmvc初始化过程
    1、项目目录


    image.png

    2、web.xml

    <!DOCTYPE web-app PUBLIC
     "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
     "http://java.sun.com/dtd/web-app_2_3.dtd" >
    
    <web-app>
      <display-name>Archetype Created Web Application</display-name>
      <!-- 配置DisaptcherServlet -->
      <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 初始化参数,配置springmvc配置文件 -->
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/springmvc.xml</param-value>
        </init-param>
        <!-- web容器启动时加载该Servlet -->
        <load-on-startup>1</load-on-startup>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>
    
    </web-app>
    

    3、3个重要的类
    继承关系: DispatcherServlet -> FrameworkServlet -> HttpServletBean

    4、从HttpServletBean开始
    4.1、init()方法


    image.png
    image.png

    总结HttpServletBean的作用:
    1、获取webxml中DispatcherServlet的初始化参数,把它添加到DispatcherServlet中。

    5、接着调用FrameworkServlet的相关方法
    5.1、initServletBean()方法


    image.png

    5.1、this.initWebApplicationContext()方法


    image.png

    5.2、this.createWebApplicationContext(rootContext)方法


    image.png

    总结FrameworkServlet的作用:
    1、创建springmvc ioc容器,并绑定spring 父容器,可以访问父容器的bean。
    2、最后解析springmvc.xml配置信息,完成springmvc容器的创建。

    6、最后调用DispatcherServlet相关方法
    6.1、onRefresh(ApplicationContext context)方法
    6.2、this.initStrategies(context)方法


    image.png

    总结DispatcherServlet的作用:
    1、初始化映射器、适配器、视图解析器。

    三、springmvc初始化结束,保留一个问题
    1、springmvc容器初始化的bean放在哪?

    相关文章

      网友评论

          本文标题:5、springmvc启动过程分析

          本文链接:https://www.haomeiwen.com/subject/nymaihtx.html