5、springmvc启动过程分析

2020-04-23  本文已影响0人  lois想当大佬

一、基础概念
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放在哪?

上一篇下一篇

猜你喜欢

热点阅读