新的一年,開啓新的篇章,歐氣滿滿,迎接將來. 前幾天回顧了spring相關的知識點,如今再來回顧下springmvc相關的知識點作一下總結.web
以前面試問題總結的那篇文章中,與springmvc相關的有哪些問題:面試
(注意兩點:
① handlerMapping定義了請求處處理器之間的映射,若是發送的請求是沒有映射的,那麼獲得的handlerExecutionChain也不爲空,而是默認的defaultServletHTTPRequestHandler,用來處理靜態資源等(配置了default-servlet-handler,不然報爲404);
② handlerExecutionChain實際上包含了攔截器和目標方法.)
(包含表單類型的校驗,數據類型的轉換,格式換等功能)
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之餘,對框架有一個更深層次的理解,不但要會用,還要懂得其原理.框架