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

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