摘要:與容器與容器的關系為容器提供了宿主環境。容器通過初始化建立,是注冊在容器中的監聽器,當容器初始化時,監聽器會收到該事件從而發起容器的初始化。是處理請求的轉發器,從而響應的請求。接著將數據進行合并,然后將數據放入中進行暴露。
Spring MVC 與 Web IoC容器與Web容器的關系
ServletContext為IoC容器提供了宿主環境。IoC容器通過ContexLoaderListener初始化建立,ContexLoaderListener是注冊在Web容器中的監聽器,當Web容器初始化時,監聽器會收到該事件從而發起Spring容器的初始化。DispatchServlet是Spring MVC處理請求的轉發器,從而響應HTTP的請求。
ContexLoaderListener會調用ContextLoader,ContextLoader又會創建XmlWebApplicationContext,XmlWebApplicationContext作為默認的IoC容器,負責從默認的/WEB-INF/applicationContext.xml中加載BeanDefinition。
ContextLoader在創建IoC容器XmlWebApplicationContext后會將其注冊入servletContext的屬性ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE中。
DispatchServlet的功能DispatchServlet負責兩個工作,根據web.xml初始化自己的上下文,響應http請求。
在ContextLoader加載完成后,開始DispatchServlet的初始化。首先從ServletContext中獲取WebApplicationContext作為雙親上下文,這里就是XmlWebApplicationContext,所以XmlWebApplicationContext定義的Bean可以被DispatchServlet獲取,在DispatchServlet中查找Bean時,會首先從雙親上下文中查找。獲取雙親上下文后,DispatchServlet會創建自己的上下文,并且將其注冊進ServletContext的屬性中,屬性名為該servlet相關的,因為一個Web容器可以有多個servlet。
DispatchServlet上下文的初始化后會開始創建一些請求處理策略,如LocalResolver、HandlerMappings等。例如,初始化HandlerMappings就是從IoC容器中獲取所有的HandlerMapping相關的Bean。
HandlerMapping是對HTTP請求到controller的映射,HandlerMapping根據請求獲取一個HandlerExecutionChain,其中包含了一個handler和多個interceptor,interceptor負責功能的增強。
例如SimpleUrlHandlerMapping在初始化時會將url和對應handler的bean放入map中保存。當請求到達時,會從SimpleUrlHandlerMapping中查找最長匹配url的handler,包裝成HandlerExecutionChain返回。
DispatchServlet處理請求的過程當請求到來,從所有的HandleMapping中依次查找到匹配的HandlerExecutionChain,多個HandleMapping是按照優先級排序的。
HandlerExecutionChain獲得后,先對請求執行intercepter的preHandler,然后執行handler,最后再次執行intercepter的postHandler,得到最終的ModelAndView對象。
最后根據ModelAndView渲染視圖并返回。
ModelAndView呈現給客戶端的過程以JSP視圖為例。
Step1:ModelAndView獲得后,會從中獲取其對應的View,也就是根據ModelAndView指明的名稱獲得對應View的Bean。
Step2:View接著將數據進行合并,然后將數據放入requst中進行暴露。
Step3:根據請求,獲取URL路徑,定位資源。如JSP文件。
Step4:將包含數據的requst轉發到目標資源路徑,由web容器負責獲取資源,并且將數據裝入JSP。最后將拼裝好的文件返回。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76340.html
摘要:開頭正式開啟我入職的里程,現在已是工作了一個星期了,這個星期算是我入職的過渡期,算是知道了學校生活和工作的差距了,總之,盡快習慣這種生活吧。當時是看的廖雪峰的博客自己也用做爬蟲寫過幾篇博客,不過有些是在前人的基礎上寫的。 showImg(https://segmentfault.com/img/remote/1460000010867984); 開頭 2017.08.21 正式開啟我...
摘要:是提供的類,為了在容器中建立容器而服務的。主要處理的請求分發,對進行管理。接收到請求由進行匹配,匹配成功后交由進行業務邏輯的處理,業務邏輯處理完成后交由進行數據的解析同時找到對應的,最終由將的結果到瀏覽器進行解析。 spring給我們帶來了什么? spring IoC、AOP、Transaction這些都是很重要的特性,但是這篇這些都不是主角,主要來談談springMVC是如何對請求參...
摘要:實戰高并發程序設計這本書是目前點評推薦比較多的書,其特色是案例小,好實踐代碼有場景,實用。想要學習多線程的朋友,這本書是我大力推薦的,我的個人博客里面二十多篇的多線程博文都是基于此書,并且在這本書的基礎上進行提煉和總結而寫出來的。 學習的最好途徑就是看書,這是我自己學習并且小有了一定的積累之后的第一體會。個人認為看書有兩點好處:showImg(/img/bVr5S5); 1.能出版出...
摘要:入門筆記簡介是一種基于的實現了設計模式的請求驅動類型的輕量級框架,是系開源項目中的一個,和配合使用。配置在中需要添加使用的和映射規則。入門較快,而掌握起來相對較難。 SpringMVC入門筆記 1. 簡介 Spring MVC是一種基于Java的實現了Web MVC設計模式的請求驅動類型的輕量級Web框架 ,是Spring系開源項目中的一個,和IoC配合使用。通過策略接口,Spring...
摘要:我自己總結的學習的系統知識點以及面試問題,已經開源,目前已經。目前最新的版本中模塊的組件已經被廢棄掉,同時增加了用于異步響應式處理的組件。每一次請求都會產生一個新的,該僅在當前內有效。顯而易見,這種模式存在很多問題。 我自己總結的Java學習的系統知識點以及面試問題,已經開源,目前已經 41k+ Star。會一直完善下去,歡迎建議和指導,同時也歡迎Star: https://githu...
閱讀 1123·2021-11-08 13:13
閱讀 1707·2019-08-30 15:55
閱讀 2762·2019-08-29 11:26
閱讀 2427·2019-08-26 13:56
閱讀 2549·2019-08-26 12:15
閱讀 2125·2019-08-26 11:41
閱讀 1394·2019-08-26 11:00
閱讀 1530·2019-08-23 18:30