web容器,servlet容器,spring容器,springmvc容器的联系

关系图

借鉴网上看到的一张图,来源于:
https://blog.csdn.net/zhanglf02/article/details/89791797在这里插入图片描述
web容器中有servlet容器,spring容器,springmvc容器。
servlet容器保存 Servlet对象。
springmvc容器保存 Controller对象。
spring容器保存 Service、Dao对象。
spring容器是springmvc容器的父级容器。

容器基本创建流程

Tomcat启动,对于每个WebApp,依次进行一下工作:

  1. 每个WebApp都有一个ServletContext。

  2. 项目启动时,Tomcat会扫描项目的web.xml配置文件,找到Filter、Listener和Servlet等配置,并创建servlet容器

  3. 如果web.xml配置了spring的ContextLoaderListener
    3.1. 在ServletContext初始化时,ContextLoaderListener会创建spring容器,管理service层、dao层的Bean。
    3.2. ContextLoaderListener会将spring容器的引用存放到ServletContext中一个属性中。

  4. 如果web.xml配置了springmvc的DispatcherServlet
    4.1. DispatcherServlet会在第一个请求到达时初始化。(DispatcherServlet的本质其实也是一个Servlet)
    4.2. DispatcherServlet初始化时,会创建springmvc容器,管理controller层的Bean。
    4.3. DispatcherServlet通过ServletContext获取spring容器,并将spring容器设置为springmvc容器的父级容器。(子容器可以访问父容器,从而在Controller里可以访问Service对象,但是在Service里不可以访问Controller对象。)

  5. 项目启动完毕。

一个请求的处理流程

  1. http请求到达web容器后,会到达具体项目下的servlet容器。
  2. servlet容器根据请求路径,找到对应的servlet对象。(默认全部由DispatcherServlet处理)
  3. DispatcherServlet通过处理映射器找到对应的controller对象(springmvc容器中),调用service对象、dao对象等等(spring容器中)执行各种业务操作…
    (就是springmvc的基本处理流程,不赘述了。)
  4. 返回结果。

refrence:
servlet容器,web容器,spring容器,springmvc容器的区别
为啥Spring和Spring MVC包扫描要分开?


end

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章