springmvc的面試知識點總結

新的一年,開啓新的篇章,歐氣滿滿,迎接未來.
前幾天回顧了spring相關的知識點,現在再來回顧下springmvc相關的知識點做一下總結.

問題總結

之前面試問題總結的那篇文章中,與springmvc相關的有哪些問題:

  1. springmvc的工作流程?

  2. springmvc dispatcherservlet與handleradapter如何關聯?

  3. 有了springmvc的IOC容器,還需要spring的IOC容器嗎?爲什麼?如何處理兼容問題?

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

    問題梳理

  • springmvc的工作流程
    我根據springmvc的流程將流程圖畫了出來:
    springmvc流程圖

  1. 請求過來之後,dispatcherServlet的url-pattern攔截請求;

  2. 判斷在springmvc中是否存在對應映射;

  3. 若不存在,判斷是否配置

  4. 如果配置,就會找到目標資源,沒有則顯示404頁面;

  5. 如果映射存在,則由handlerMapping獲handlerExecutionChain對象;(注意兩點:
    ① handlerMapping定義了請求到處理器之間的映射,如果發送的請求是沒有映射的,那麼得到的handlerExecutionChain也不爲空,而是默認的defaultServletHTTPRequestHandler,用來處理靜態資源等(配置了default-servlet-handler,否則報爲404);
    ② handlerExecutionChain實際上包含了攔截器和目標方法.)

  6. 獲取HandlerAdapter對象;(包含表單類型的校驗,數據類型的轉換,格式換等功能)

  7. 調用 interceptor攔截器的preHandle方法;

  8. 調用目標方法;

  9. 調用攔截器的postHandle方法;

  10. 處理視圖時候,觀察是否存在異常,存在異常,則由HandlerExceptionResolver來處理異常,並得到新的ModelAndView對象;不存在異常,則由ViewResolver視圖解析器來解析視圖;

  11. 調用攔截器的afterComplettion方法;

  • springmvc DispatcherServlet與handlerAdapter如何關聯?
    DispatcherServlet攔截到請求之後,根據handlerMapping獲取到handlerExecutionChain對象,然後,在handlerExecutionChain對象不爲null的情況下,根據handlerExecutionChain中的handler對象獲取HandlerAdapter對象;

  • 有了springmvc的IOC容器,還需要spring的IOC容器嗎?爲什麼?如何處理兼容問題?
    這個問題再進一步,換個方式提問即是否還需要在web.xml方法裏面配置啓動springIOC容器的ContextLoaderListener?
    可以從正反兩方面來回答,首先是需要,通常情況下,類似於數據源,事務,整合其他框架等都是放在spring的配置文件中,而不是springmvc的配置文件中, 一般情況下,開發過程中的Service,Dao也都是放在spring的IOC容器當中;其次可以是不需要的,也可以都放在springmvc的配置文件當中,當然需要分多個spring的配置文件,然後通過import節點導入到springmvc的配置文件當中.
    幾點要注意的地方:
    1. springIOC容器和springmvc的IOC容器 掃描的部分有重合的地方,就會導致bean被創建2次,解決方案:使用 exclude-filter和include-filter配合來區分哪些bean交給springIOC容器,哪些bean交給springmvcIOC容器;
    2. springmvc IOC容器裏面的bean可以引用springIOC容器的bean,反之則不行,多個springIOC 容器之間可以設置爲父子關係,以實現良好的解耦.舉個栗子,springIOC容器好比是全局作用域,springmvcIOC容器好比是局部作用域,局部的可以引用全局的,而全局的卻不能引用局部的.

  • tomcat容器如何與springmvc的dispatcherservlet通信的?
    Apache Tomcat軟件是JavaServlet,JavaServerPages,Java ExpressionLanguage和JavaWebSocket技術的開源實現,SpringMVC則是spring推出的基於servlet標準的MVC框架實現,由此可知,SpringMvc和Tomcat 的結合點就是Servlet.SpringMVC的DispatcherServlet繼承了HttpServlet,那麼對於tomcat來說,springmvc實際就是一個Servlet.
    一個http請求的具體處理流程:
    1. 用戶向tomcat容器發送一個請求;
    2. tomcat容器接收到請求之後,分析客戶的請求信息;
    3. tomcat創建一個Httprequest對象,將用戶的請求信息封裝到該對象中;
    4. tomcat創建一個HttpResponse對象;
    5. tomcat調用HttpServlet的Service方法,將Httprequest,HTTPResponse傳遞給Httpservlet對象;

  • 在此我向大家推薦一個架構學習交流圈:830478757  幫助突破瓶頸 提升思維能力
    6. HttpServlet調用HttpRequest對象的有關方法,獲取Http請求信息,HttpServlet調用HttpResponse對象的有關方法,生成響應數據;
    7. tomcat把HttpServlet的響應結果傳給Web客戶.

要注意的幾點東西:
①:web.xml配置文件的作用其實就是配置http請求和servlet之間的映射關係,通過這個配置文件,Tomcat可以把請求轉發給不同的servlet實例;
②:springmvc也是servlet標準的一個實現,所有的http請求都映射到DispatcherServlet上去,這個時候,請求就已經由Tomcat轉發到springmvc框架中去了,接着再由DispatcherServlet將請求轉發到各個Controller當中去.

小結

這篇文章主要回顧了springmvc框架的如何處理http請求的過程,以及其和Tomcat容器之間的請發轉發是如何實現的,如果能夠熟練掌握,面試碰到相關的問題,也能夠侃侃而談了,同時也是在平時CURD之餘,對框架有一個更深層次的理解,不但要會用,還要懂得其原理.


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