Spring思惟導圖,讓Spring再也不難懂(mvc篇)

Spring的模型-視圖-控制器(MVC)框架是圍繞一個DispatcherServlet來設計的,這個Servlet會把請求分發給各個處理器,並支持可配置的處理器映射、視圖渲染、本地化、時區與主題渲染等,甚至還能支持文件上傳。 寫在前面 溫故而知新,今天一塊兒來複習一下spring mvc的內容吧。 spring mvc簡介與運行原理 Spring的模型-視圖-控制器(MVC)框架是圍繞一個DispatcherServlet來設計的,這個Servlet會把請求分發給各個處理器,並支持可配置的處理器映射、視圖渲染、本地化、時區與主題渲染等,甚至還能支持文件上傳。html

(1) Http請求:客戶端請求提交到DispatcherServlet。 (2) 尋找處理器:由DispatcherServlet控制器查詢一個或多個HandlerMapping,找處處理請求的Controller。 (3) 調用處理器:DispatcherServlet將請求提交到Controller。 (4)(5)調用業務處理和返回結果:Controller調用業務邏輯處理後,返回ModelAndView。 (6)(7)處理視圖映射並返回模型: DispatcherServlet查詢一個或多個ViewResoler視圖解析器,找到ModelAndView指定的視圖。 (8) Http響應:視圖負責將結果顯示到客戶端。 主要註解前端

ContextLoaderListener 在講ContextLoaderListener以前,首先來了解一下web.xml的做用: 一個web中能夠沒有web.xml文件,也就是說,web.xml文件並非web工程必須的。web.xml文件是用來初始化配置信息:好比Welcome頁面、servlet、servlet-mapping、filter、listener、啓動加載級別等。當你的web工程沒用到這些時,你能夠不用web.xml文件來配置你的Application。 當要啓動某個web項目時,服務器軟件或容器如(tomcat)會第一步加載項目中的web.xml文件,經過其中的各類配置來啓動項目,只有其中配置的各項均無誤時,項目才能正確啓動。web.xml有多項標籤,在其加載的過程當中順序依次爲:context-param >> listener >> fileter >> servlet。(同類多個節點以出現順序依次加載)java

而spring mvc啓動過程大體分爲兩個過程: ContextLoaderListener初始化,實例化IoC容器,並將此容器實例註冊到ServletContext中。 DispatcherServlet初始化。程序員

其中ContextLoaderListener監聽器它實現了ServletContextListener這個接口,在web.xml配置這個監聽器,啓動容器時,就會默認執行它實現的方法。在ContextLoaderListener中關聯了ContextLoader這個類,因此整個加載配置過程由ContextLoader來完成。 ContextLoaderListener在web.xml中的配置:web

ServletContextListener 接口有兩個方法:contextInitialized,contextDestroyed DispatcherServlet Spring MVC框架,與其餘不少web的MVC框架同樣:請求驅動;全部設計都圍繞着一箇中央Servlet來展開,它負責把全部請求分發到控制器;同時提供其餘web應用開發所須要的功能。不過Spring的中央處理器,DispatcherServlet,能作的比這更多。 下圖展現了Spring Web MVC的DispatcherServlet處理請求的工做流。熟悉設計模式的朋友會發現,DispatcherServlet應用的其實就是一個「前端控制器」的設計模式(其餘不少優秀的web框架也都使用了這個設計模式)。 流程圖:面試

在web.xml中的配置:spring

其中 load-on-startup:表示啓動容器時初始化該Servlet; url-pattern:表示哪些請求交給Spring Web MVC處理, 「/」 是用來定義默認servlet映射的。也能夠如「*.html」表示攔截全部以html爲擴展名的請求。 在Spring MVC中,每一個DispatcherServlet都持有一個本身的上下文對象WebApplicationContext,它又繼承了根(root)WebApplicationContext對象中已經定義的全部bean。這些繼承的bean能夠在具體的Servlet實例中被重載,在每一個Servlet實例中你也能夠定義其scope下的新bean。 WebApplicationContext繼承自ApplicationContext,它提供了一些web應用常常須要用到的特性。它與普通的ApplicationContext不一樣的地方在於,它支持主題的解析,而且知道它關聯到的是哪一個servlet(它持有一個該ServletContext的引用)設計模式

spring mvc同時提供了不少特殊的註解,用於處理請求和渲染視圖等。DispatcherServlet初始化的過程當中會默認使用這些特殊bean進行配置。若是你想指定使用哪一個特定的bean,你能夠在web應用上下文WebApplicationContext中簡單地配置它們。tomcat

其中,經常使用的ViewResolver的配置。以jsp做爲視圖爲例服務器

配置上傳文件限制MultipartResolver

applicationContext.xml中的標籤

文件上傳 前面說到DispatcherServlet中有個特殊的Bean叫MultipartResolver,可用於限制文件的上傳大小等。當解析器MultipartResolver完成處理時,請求便會像其餘請求同樣被正常流程處理。 表單:

控制器:

異常處理 先來講下常見的異常處理有幾種方式,以下圖:

Spring的處理器異常解析器HandlerExceptionResolver接口的實現負責處理各種控制器執行過程當中出現的異常。也是上面提到的,是DispatcherServlet中的特殊bean,能夠自定義配置處理。 某種程度上講,HandlerExceptionResolver與你在web應用描述符web.xml文件中能定義的異常映射(exception mapping)很相像,不過它比後者提供了更靈活的方式。好比它能提供異常被拋出時正在執行的是哪一個處理器這樣的信息。 HandlerExceptionResolver 提供resolveException接口:

在BaseController中使用 @ExceptionHandler註解處理異常:

在web.xml中處理異常:

來一個問題:HandlerExceptionResolver和web.xml中配置的error-page會有衝突嗎? 解答:若是resolveException返回了ModelAndView,會優先根據返回值中的頁面來顯示。不過,resolveException能夠返回null,此時則展現web.xml中的error-page的500狀態碼配置的頁面。 當web.xml中有相應的error-page配置,則能夠在實現resolveException方法時返回null。 API文檔中對返回值的解釋: return a corresponding ModelAndView to forward to, or null for default processing. 若是你也想在IT行業拿高薪,能夠參加咱們的訓練營課程,選擇最適合本身的課程學習,技術大牛親授,7個月後,進入名企拿高薪。咱們的課程內容有:Java工程化、高性能及分佈式、高性能、深刻淺出。高架構。性能調優、Spring,MyBatis,Netty源碼分析和大數據等多個知識點。若是你想拿高薪的,想學習的,想就業前景好的,想跟別人競爭能取得優點的,想進阿里面試但擔憂面試不過的,你均可以來,羣號爲: 454377428 注:加羣要求 一、具備1-5工做經驗的,面對目前流行的技術不知從何下手,須要突破技術瓶頸的能夠加。 二、在公司待久了,過得很安逸,但跳槽時面試碰壁。須要在短期內進修、跳槽拿高薪的能夠加。 三、若是沒有工做經驗,但基礎很是紮實,對java工做機制,經常使用設計思想,經常使用java開發框架掌握熟練的,能夠加。 四、以爲本身很牛B,通常需求都能搞定。可是所學的知識點沒有系統化,很難在技術領域繼續突破的能夠加。 5.阿里Java高級大牛直播講解知識點,分享知識,多年工做經驗的梳理和總結,帶着你們全面、科學地創建本身的技術體系和技術認知! 6.小號或者小白之類加羣一概不給過,謝謝。 目標已經有了,下面就看行動了!記住:學習永遠是本身的事情,你不學時間也不會多,你學了有時候卻可以使用本身學到的知識換得更多自由自在的美好時光!時間是生命的基本組成部分,也是萬物存在的根本尺度,咱們的時間在那裏咱們的生活就在那裏!咱們價值也將在那裏提高或消弭!Java程序員,加油吧

相關文章
相關標籤/搜索