成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Spring技術(shù)內(nèi)幕筆記(2):Spring MVC 與 Web

YancyYe / 1100人閱讀

摘要:與容器與容器的關(guān)系為容器提供了宿主環(huán)境。容器通過初始化建立,是注冊在容器中的監(jiān)聽器,當(dāng)容器初始化時(shí),監(jiān)聽器會收到該事件從而發(fā)起容器的初始化。是處理請求的轉(zhuǎn)發(fā)器,從而響應(yīng)的請求。接著將數(shù)據(jù)進(jìn)行合并,然后將數(shù)據(jù)放入中進(jìn)行暴露。

Spring MVC 與 Web IoC容器與Web容器的關(guān)系

ServletContext為IoC容器提供了宿主環(huán)境。IoC容器通過ContexLoaderListener初始化建立,ContexLoaderListener是注冊在Web容器中的監(jiān)聽器,當(dāng)Web容器初始化時(shí),監(jiān)聽器會收到該事件從而發(fā)起Spring容器的初始化。DispatchServlet是Spring MVC處理請求的轉(zhuǎn)發(fā)器,從而響應(yīng)HTTP的請求。

ContexLoaderListener會調(diào)用ContextLoader,ContextLoader又會創(chuàng)建XmlWebApplicationContext,XmlWebApplicationContext作為默認(rèn)的IoC容器,負(fù)責(zé)從默認(rèn)的/WEB-INF/applicationContext.xml中加載BeanDefinition。

ContextLoader在創(chuàng)建IoC容器XmlWebApplicationContext后會將其注冊入servletContext的屬性ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE中。

DispatchServlet的功能

DispatchServlet負(fù)責(zé)兩個(gè)工作,根據(jù)web.xml初始化自己的上下文,響應(yīng)http請求。

在ContextLoader加載完成后,開始DispatchServlet的初始化。首先從ServletContext中獲取WebApplicationContext作為雙親上下文,這里就是XmlWebApplicationContext,所以XmlWebApplicationContext定義的Bean可以被DispatchServlet獲取,在DispatchServlet中查找Bean時(shí),會首先從雙親上下文中查找。獲取雙親上下文后,DispatchServlet會創(chuàng)建自己的上下文,并且將其注冊進(jìn)ServletContext的屬性中,屬性名為該servlet相關(guān)的,因?yàn)橐粋€(gè)Web容器可以有多個(gè)servlet。

DispatchServlet上下文的初始化后會開始創(chuàng)建一些請求處理策略,如LocalResolver、HandlerMappings等。例如,初始化HandlerMappings就是從IoC容器中獲取所有的HandlerMapping相關(guān)的Bean。

HandlerMapping是對HTTP請求到controller的映射,HandlerMapping根據(jù)請求獲取一個(gè)HandlerExecutionChain,其中包含了一個(gè)handler和多個(gè)interceptor,interceptor負(fù)責(zé)功能的增強(qiáng)。

例如SimpleUrlHandlerMapping在初始化時(shí)會將url和對應(yīng)handler的bean放入map中保存。當(dāng)請求到達(dá)時(shí),會從SimpleUrlHandlerMapping中查找最長匹配url的handler,包裝成HandlerExecutionChain返回。

DispatchServlet處理請求的過程

當(dāng)請求到來,從所有的HandleMapping中依次查找到匹配的HandlerExecutionChain,多個(gè)HandleMapping是按照優(yōu)先級排序的。

HandlerExecutionChain獲得后,先對請求執(zhí)行intercepter的preHandler,然后執(zhí)行handler,最后再次執(zhí)行intercepter的postHandler,得到最終的ModelAndView對象。

最后根據(jù)ModelAndView渲染視圖并返回。

ModelAndView呈現(xiàn)給客戶端的過程

以JSP視圖為例。

Step1:ModelAndView獲得后,會從中獲取其對應(yīng)的View,也就是根據(jù)ModelAndView指明的名稱獲得對應(yīng)View的Bean。

Step2:View接著將數(shù)據(jù)進(jìn)行合并,然后將數(shù)據(jù)放入requst中進(jìn)行暴露。

Step3:根據(jù)請求,獲取URL路徑,定位資源。如JSP文件。

Step4:將包含數(shù)據(jù)的requst轉(zhuǎn)發(fā)到目標(biāo)資源路徑,由web容器負(fù)責(zé)獲取資源,并且將數(shù)據(jù)裝入JSP。最后將拼裝好的文件返回。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/76340.html

相關(guān)文章

  • 那些年我看過的書 —— 致敬我的大學(xué)生活 —— Say Good Bye !

    摘要:開頭正式開啟我入職的里程,現(xiàn)在已是工作了一個(gè)星期了,這個(gè)星期算是我入職的過渡期,算是知道了學(xué)校生活和工作的差距了,總之,盡快習(xí)慣這種生活吧。當(dāng)時(shí)是看的廖雪峰的博客自己也用做爬蟲寫過幾篇博客,不過有些是在前人的基礎(chǔ)上寫的。 showImg(https://segmentfault.com/img/remote/1460000010867984); 開頭 2017.08.21 正式開啟我...

    xiaoqibTn 評論0 收藏0
  • spring MVC -- controller參數(shù)的解析

    摘要:是提供的類,為了在容器中建立容器而服務(wù)的。主要處理的請求分發(fā),對進(jìn)行管理。接收到請求由進(jìn)行匹配,匹配成功后交由進(jìn)行業(yè)務(wù)邏輯的處理,業(yè)務(wù)邏輯處理完成后交由進(jìn)行數(shù)據(jù)的解析同時(shí)找到對應(yīng)的,最終由將的結(jié)果到瀏覽器進(jìn)行解析。 spring給我們帶來了什么? spring IoC、AOP、Transaction這些都是很重要的特性,但是這篇這些都不是主角,主要來談?wù)剆pringMVC是如何對請求參...

    suemi 評論0 收藏0
  • 【轉(zhuǎn)】成為Java頂尖程序員 ,看這10本書就夠了

    摘要:實(shí)戰(zhàn)高并發(fā)程序設(shè)計(jì)這本書是目前點(diǎn)評推薦比較多的書,其特色是案例小,好實(shí)踐代碼有場景,實(shí)用。想要學(xué)習(xí)多線程的朋友,這本書是我大力推薦的,我的個(gè)人博客里面二十多篇的多線程博文都是基于此書,并且在這本書的基礎(chǔ)上進(jìn)行提煉和總結(jié)而寫出來的。 學(xué)習(xí)的最好途徑就是看書,這是我自己學(xué)習(xí)并且小有了一定的積累之后的第一體會。個(gè)人認(rèn)為看書有兩點(diǎn)好處:showImg(/img/bVr5S5);  1.能出版出...

    DTeam 評論0 收藏0
  • SpringMVC入門筆記

    摘要:入門筆記簡介是一種基于的實(shí)現(xiàn)了設(shè)計(jì)模式的請求驅(qū)動類型的輕量級框架,是系開源項(xiàng)目中的一個(gè),和配合使用。配置在中需要添加使用的和映射規(guī)則。入門較快,而掌握起來相對較難。 SpringMVC入門筆記 1. 簡介 Spring MVC是一種基于Java的實(shí)現(xiàn)了Web MVC設(shè)計(jì)模式的請求驅(qū)動類型的輕量級Web框架 ,是Spring系開源項(xiàng)目中的一個(gè),和IoC配合使用。通過策略接口,Spring...

    zhaochunqi 評論0 收藏0
  • 15個(gè)經(jīng)典的Spring面試常見問題

    摘要:我自己總結(jié)的學(xué)習(xí)的系統(tǒng)知識點(diǎn)以及面試問題,已經(jīng)開源,目前已經(jīng)。目前最新的版本中模塊的組件已經(jīng)被廢棄掉,同時(shí)增加了用于異步響應(yīng)式處理的組件。每一次請求都會產(chǎn)生一個(gè)新的,該僅在當(dāng)前內(nèi)有效。顯而易見,這種模式存在很多問題。 我自己總結(jié)的Java學(xué)習(xí)的系統(tǒng)知識點(diǎn)以及面試問題,已經(jīng)開源,目前已經(jīng) 41k+ Star。會一直完善下去,歡迎建議和指導(dǎo),同時(shí)也歡迎Star: https://githu...

    sarva 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<