springmvc的面試知識點總結

新的一年,開啓新的篇章,歐氣滿滿,迎接將來. 前幾天回顧了spring相關的知識點,如今再來回顧下springmvc相關的知識點作一下總結.web

問題總結

以前面試問題總結的那篇文章中,與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. 若不存在,判斷是否配置mvc:default-servlet-handler/;
  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對象;spring

  • 有了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

  • 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對象; 6. HttpServlet調用HttpRequest對象的有關方法,獲取Http請求信息,HttpServlet調用HttpResponse對象的有關方法,生成響應數據; 7. tomcat把HttpServlet的響應結果傳給Web客戶.mvc

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

小結

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

相關文章
相關標籤/搜索