Spring MVC相關內容整理(面試福利哦)
最近有同事問了我很多關於spring mvc的問題,大抵都是用於面試的,平時沒人關注這些的,有些問題把我問的也是一愣一愣的,今天有空順便就整理了下涉及到spring的相關資料問題,不管簡單或者無聊,算是給你們的福利吧。
一、第一個當然是關於spirng mvc的請求解析流程了,說實話,這個需要回答的內容確實有點多,但只要說出幾個關鍵詞,差不多也OK了。比如:dispatchservlet,handlerMapping,handlerAdapter,viewReslover。順便貼圖給大家:
1、使用者傳送請求至前端控制器DispatcherServlet
2、DispatcherServlet收到請求呼叫HandlerMapping處理器對映器。
3、處理器對映器根據請求url找到具體的處理器,生成處理器物件及處理器攔截器(如果有則生成)一併返回給DispatcherServlet。
4、DispatcherServlet通過HandlerAdapter處理器介面卡呼叫處理器
5、執行處理器(Controller,也叫後端控制器)。
6、Controller執行完成返回ModelAndView
7、HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet
8、DispatcherServlet將ModelAndView傳給ViewReslover檢視解析器
9、ViewReslover解析後返回具體View
10、DispatcherServlet對View進行渲染檢視(即將模型資料填充至檢視中)。
11、DispatcherServlet響應使用者
二、你使用過Spring mvc的話,那麼就該讓你談一談和Strust2的區別,有什麼優點,知道以下內容,基本也就可以了。
Struts2是類級別上的攔截,一個類對應一個request上下文,SpringMVC是方法級別的攔截,一個方法對應一個request上下文。而且Struts過濾後是去Struts配置檔案中找Action,每個類的請求你都要配置對應的攔截器。而SpringMVC過濾後是去controller中找對應於@RequestMapping註解的url繫結的方法。
也因為攔截器原因,導致Struts2的action比較亂,因為它要定義屬性來獲取請求中引數的資料,而屬性在一個類的方法間是共享的(方法間不能獨享request、response資料),屬於多例模式。所以會有點亂。而SpringMVC中請求引數與controller中方法的形參自動配對(在名字相同,或請求引數與形參的屬性名相同,或通過@RequestParam註解指定條件下會自動將請求引數的值賦給形參)方法間可以獨享request、response資料,屬於單利模式。(單例模式,在多執行緒訪問的時候有執行緒安全問題,不要用同步,會影響效能的,解決方案是在控制器裡面不能寫欄位)。
springmvc的入口是一個servlet即前端控制器(DispatchServlet),而struts2入口是一個filter過慮器(StrutsPrepareAndExecuteFilter)
三、待續...(後面打算整理出關於面試經常碰到的問題,比如redis的資料型別,儲存方式,叢集配置;Mq訊息的生產者,消費者問題;執行緒相關的執行緒池事項;spring的核心AOP和IOC的說辭;資料庫動態讀寫分離與連線池;分散式等)。