一、 什么是Servlet、Tomcat
-
什么是Servlet:实质上是一个Java类,是一种运行在支持Java应用服务器上的Web组件,它与普通Java类的区别在于它是一个专门处理请求和响应的Java类。其主要功能是:接受前端用户的请求,调用后端的逻辑处理程序,最终给客户返回响应。HttpServlet:Servlet API的核心类,自定义的Servlet都是该类的子类。
这里为什么要引入Servlet呢?因为HTML+JS的静态页面非常局限,不能灵活的处理页面和请求响应。所以引入Servlet + HTML来进行动态页面处理。
-
什么是Tomcat:Servlet是一种特殊的java类,必须在服务器容器里面生存工作。Tomcat就是这样一种服务器容器,它给Servlet提供生存环境(servlet必须在容器里启动),同时将Web请求封装成对象交给Setvlet处理,将Servlet相应封装成对象,返回给Web显示。
二、 Spring启动过程
-
首先,我们会在Web.xml文件中配置ContextLoaderListener监听器,Spring正是通过它来进行容器初始化的
-
加载WebApplicationContext
-
进行Bean对象的实例化和初始化
-
将Spring容器初始化到Servlet上下文中
三、核心源码解析
- 入口ContextLoderListener.contextInitialized,ContextLoaderListener继承了ContextLoader并实现了ServletContextListener,tomcat在调用ServletContextListener.contextInitialized时会自动进行初始化
- 创建WebApplicatinContext入口:this.context = this.createWebApplicationContext(servletContext, parent);期间从配置的contextConfigLocation加载了Spring的主配置文件,并通过DefinitionReader进行各种文件的扫描,组装成BeanDefinitions,根据BeanDefinitions进行对象的实例化和初始化
- servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context)将Spring容器初始化到Servlet上下文中,即作为servletContext.Attribute的一个属性