springmvc的面試知識(shí)點(diǎn)總結(jié)

新的一年,開(kāi)啟新的篇章,歐氣滿滿,迎接未來(lái).

前幾天回顧了spring相關(guān)的知識(shí)點(diǎn),現(xiàn)在再來(lái)回顧下springmvc相關(guān)的知識(shí)點(diǎn)做一下總結(jié).

問(wèn)題總結(jié)

之前面試問(wèn)題總結(jié)的那篇文章中,與springmvc相關(guān)的有哪些問(wèn)題:

springmvc的工作流程?

springmvc dispatcherservlet與handleradapter如何關(guān)聯(lián)?

有了springmvc的IOC容器,還需要spring的IOC容器嗎?為什么?如何處理兼容問(wèn)題?

tomcat容器如何與springmvc的dispatcherservlet通信的?

問(wèn)題梳理

springmvc的工作流程

我根據(jù)springmvc的流程將流程圖畫(huà)了出來(lái):

請(qǐng)求過(guò)來(lái)之后,dispatcherServlet的url-pattern攔截請(qǐng)求;

判斷在springmvc中是否存在對(duì)應(yīng)映射;

若不存在,判斷是否配置

如果配置,就會(huì)找到目標(biāo)資源,沒(méi)有則顯示404頁(yè)面;

如果映射存在,則由handlerMapping獲handlerExecutionChain對(duì)象;(注意兩點(diǎn):

① handlerMapping定義了請(qǐng)求到處理器之間的映射,如果發(fā)送的請(qǐng)求是沒(méi)有映射的,那么得到的handlerExecutionChain也不為空,而是默認(rèn)的defaultServletHTTPRequestHandler,用來(lái)處理靜態(tài)資源等(配置了default-servlet-handler,否則報(bào)為404);

② handlerExecutionChain實(shí)際上包含了攔截器和目標(biāo)方法.)

獲取HandlerAdapter對(duì)象;(包含表單類型的校驗(yàn),數(shù)據(jù)類型的轉(zhuǎn)換,格式換等功能)

調(diào)用 interceptor攔截器的preHandle方法;

調(diào)用目標(biāo)方法;

調(diào)用攔截器的postHandle方法;

處理視圖時(shí)候,觀察是否存在異常,存在異常,則由HandlerExceptionResolver來(lái)處理異常,并得到新的ModelAndView對(duì)象;不存在異常,則由ViewResolver視圖解析器來(lái)解析視圖;

調(diào)用攔截器的afterComplettion方法;

springmvc DispatcherServlet與handlerAdapter如何關(guān)聯(lián)?

DispatcherServlet攔截到請(qǐng)求之后,根據(jù)handlerMapping獲取到handlerExecutionChain對(duì)象,然后,在handlerExecutionChain對(duì)象不為null的情況下,根據(jù)handlerExecutionChain中的handler對(duì)象獲取HandlerAdapter對(duì)象;

有了springmvc的IOC容器,還需要spring的IOC容器嗎?為什么?如何處理兼容問(wèn)題?

這個(gè)問(wèn)題再進(jìn)一步,換個(gè)方式提問(wèn)即是否還需要在web.xml方法里面配置啟動(dòng)springIOC容器的ContextLoaderListener?

可以從正反兩方面來(lái)回答,首先是需要,通常情況下,類似于數(shù)據(jù)源,事務(wù),整合其他框架等都是放在spring的配置文件中,而不是springmvc的配置文件中, 一般情況下,開(kāi)發(fā)過(guò)程中的Service,Dao也都是放在spring的IOC容器當(dāng)中;其次可以是不需要的,也可以都放在springmvc的配置文件當(dāng)中,當(dāng)然需要分多個(gè)spring的配置文件,然后通過(guò)import節(jié)點(diǎn)導(dǎo)入到springmvc的配置文件當(dāng)中.

幾點(diǎn)要注意的地方:

1. springIOC容器和springmvc的IOC容器 掃描的部分有重合的地方,就會(huì)導(dǎo)致bean被創(chuàng)建2次,解決方案:使用 exclude-filter和include-filter配合來(lái)區(qū)分哪些bean交給springIOC容器,哪些bean交給springmvcIOC容器;

2. springmvc IOC容器里面的bean可以引用springIOC容器的bean,反之則不行,多個(gè)springIOC 容器之間可以設(shè)置為父子關(guān)系,以實(shí)現(xiàn)良好的解耦.舉個(gè)栗子,springIOC容器好比是全局作用域,springmvcIOC容器好比是局部作用域,局部的可以引用全局的,而全局的卻不能引用局部的.

tomcat容器如何與springmvc的dispatcherservlet通信的?

Apache Tomcat軟件是JavaServlet,JavaServerPages,Java ExpressionLanguage和JavaWebSocket技術(shù)的開(kāi)源實(shí)現(xiàn),SpringMVC則是spring推出的基于servlet標(biāo)準(zhǔn)的MVC框架實(shí)現(xiàn),由此可知,SpringMvc和Tomcat 的結(jié)合點(diǎn)就是Servlet.SpringMVC的DispatcherServlet繼承了HttpServlet,那么對(duì)于tomcat來(lái)說(shuō),springmvc實(shí)際就是一個(gè)Servlet.

一個(gè)http請(qǐng)求的具體處理流程:

1. 用戶向tomcat容器發(fā)送一個(gè)請(qǐng)求;

2. tomcat容器接收到請(qǐng)求之后,分析客戶的請(qǐng)求信息;

3. tomcat創(chuàng)建一個(gè)Httprequest對(duì)象,將用戶的請(qǐng)求信息封裝到該對(duì)象中;

4. tomcat創(chuàng)建一個(gè)HttpResponse對(duì)象;

5. tomcat調(diào)用HttpServlet的Service方法,將Httprequest,HTTPResponse傳遞給Httpservlet對(duì)象;

在此我向大家推薦一個(gè)架構(gòu)學(xué)習(xí)交流圈:830478757 ?幫助突破瓶頸 提升思維能力

6. HttpServlet調(diào)用HttpRequest對(duì)象的有關(guān)方法,獲取Http請(qǐng)求信息,HttpServlet調(diào)用HttpResponse對(duì)象的有關(guān)方法,生成響應(yīng)數(shù)據(jù);

7. tomcat把HttpServlet的響應(yīng)結(jié)果傳給Web客戶.

要注意的幾點(diǎn)東西:

①:web.xml配置文件的作用其實(shí)就是配置http請(qǐng)求和servlet之間的映射關(guān)系,通過(guò)這個(gè)配置文件,Tomcat可以把請(qǐng)求轉(zhuǎn)發(fā)給不同的servlet實(shí)例;

②:springmvc也是servlet標(biāo)準(zhǔn)的一個(gè)實(shí)現(xiàn),所有的http請(qǐng)求都映射到DispatcherServlet上去,這個(gè)時(shí)候,請(qǐng)求就已經(jīng)由Tomcat轉(zhuǎn)發(fā)到springmvc框架中去了,接著再由DispatcherServlet將請(qǐng)求轉(zhuǎn)發(fā)到各個(gè)Controller當(dāng)中去.

小結(jié)

這篇文章主要回顧了springmvc框架的如何處理http請(qǐng)求的過(guò)程,以及其和Tomcat容器之間的請(qǐng)發(fā)轉(zhuǎn)發(fā)是如何實(shí)現(xiàn)的,如果能夠熟練掌握,面試碰到相關(guān)的問(wèn)題,也能夠侃侃而談了,同時(shí)也是在平時(shí)CURD之余,對(duì)框架有一個(gè)更深層次的理解,不但要會(huì)用,還要懂得其原理.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 新的一年,開(kāi)啟新的篇章,歐氣滿滿,迎接未來(lái).前幾天回顧了spring相關(guān)的知識(shí)點(diǎn),現(xiàn)在再來(lái)回顧下springmvc...
    史迪奇Aloha閱讀 1,256評(píng)論 1 4
  • 本文是我自己在秋招復(fù)習(xí)時(shí)的讀書(shū)筆記,整理的知識(shí)點(diǎn),也是為了防止忘記,尊重勞動(dòng)成果,轉(zhuǎn)載注明出處哦!如果你也喜歡,那...
    波波波先森閱讀 12,466評(píng)論 6 86
  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,901評(píng)論 11 349
  • 1.內(nèi)存泄露 內(nèi)存泄漏兩種情況: 在堆中申請(qǐng)的空間沒(méi)有被釋放(虛擬機(jī)gc可以解決) 對(duì)象已不在使用,但仍然在內(nèi)存中...
    Aimerwhy閱讀 711評(píng)論 0 0
  • IOC 控制反轉(zhuǎn)容器控制程序?qū)ο笾g的關(guān)系,而不是傳統(tǒng)實(shí)現(xiàn)中,有程序代碼之間控制,又名依賴注入。All 類的創(chuàng)建,...
    irckwk1閱讀 1,101評(píng)論 0 0

友情鏈接更多精彩內(nèi)容