這裏是修真院後端小課堂,每篇分享文從html
【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴展思考】【更多討論】【參考文獻】前端
八個方面深度解析後端知識/技能,本篇分享的是:java
【SpringMVC工做原理。】程序員
你們好,我是IT修真院深圳分院第十三期學員王東東,一枚正直純潔善良的JAVA程序員。web
今天給你們分享一下,修真院官網JAVA任務二,擴展思考中的知識點——SpringMVC工做原理。spring
1、背景介紹後端
SpringMVC是Spring的一個後續產品,其實就是Spring在原有基礎上, 又提供了web應用的MVC模塊,能夠簡單的把SpringMVC理解爲是Spring的一個模塊(相似AOP,IOC這樣的模塊),網絡上常常會說SpringMVC和Spring無縫集成,其實SpringMVC就是Spring的一個子模塊。設計模式
2、知識剖析網絡
1.MVC設計模式架構
MVC設計模式
M-Model 模型
V-View 視圖(作界面的展現 jsp,html……)
C-Controller 控制器(接收請求—>調用模型—>根據結果派發頁面)
2.XML配置文件
主要有兩個配置文件,等下結合代碼來說
①web.xml文件,啓動前端控制器
②applacationContext.xml文件,對前端控制器的配置
3.SpringMVC流程
(1) Http請求:客戶端請求提交到DispatcherServlet。
(2) 尋找處理器:由DispatcherServlet控制器查詢一個或多個HandlerMapping,找處處理請求的Controller。
(3) 調用處理器:DispatcherServlet將請求提交到Controller。
(4)調用業務處理和返回結果:Controller調用業務邏輯處理後,返回ModelAndView。
(5)處理視圖映射並返回模型: DispatcherServlet查詢一個或多個ViewResoler視圖解析器,找到ModelAndView指定的視圖。
(6) Http響應:視圖負責將結果顯示到客戶端。
4.其中的幾個組件
(1)DispatcherServlet接口:Spring提供的前端控制器,全部的請求都有通過它來統一分發。在DispatcherServlet將請求分發給Spring Controller以前,須要藉助於Spring提供的HandlerMapping定位到具體的Controller。
(2)HandlerMapping接口:可以完成客戶請求到Controller映射。
(3)Controller接口:須要爲併發用戶處理上述請求,處理完用戶請求,則返回ModelAndView對象給DispatcherServlet前端控制器
(4)ViewResolver接口:Spring提供的視圖解析器(ViewResolver)在Web應用中查找View對象,從而將相應結果渲染給客戶。
3、常見問題
1.中文亂碼問題
2.Controller返回值設置與jsp文件名不符,致使跳轉失敗
4、解決方案
1.value適合給變量注入屬性,ref注入的是映射屬性。
2.規範返回值,並在編寫代碼時進行測試。
5、編碼實戰
6、擴展思考
DispatcherServlet:
從宏觀角度考慮,DispatcherServlet是整個Web應用的控制器;從微觀考慮,Controller是單個Http請求處理過程當中的控制器,而ModelAndView是Http請求過程當中返回的模型(Model)和視圖(View)。
它是整個Spring MVC的核心。它負責接收HTTP請求組織協調Spring MVC的各個組成部分。其主要工做有如下三項:
(1)截獲符合特定格式的URL請求。
(2)初始化DispatcherServlet上下文對應WebApplicationContext,並將其與業務層、持久化層的WebApplicationContext創建關聯。
(3)初始化Spring MVC的各個組成組件,並裝配到DispatcherServlet中。
注:本人初學java者,若有不對敬請指出,謝謝!
7、參考文獻
百度百科、博客園、CSDN
八.更多討論
1.運行mvn jetty run報錯,提示多了一個文件,什麼緣由?
spring-web和org.springframework.web.servlet中都有一個web-fragment.xml文件,致使jetty讀取時報錯。
2.傳統三層架構是怎樣的?
用一張圖清晰地表達出傳統三層的結構:
這裏出BUG了,圖片傳不上來,
請複製下面的網址到DSCN上看...抱歉..
3.Springmvc的優勢都有哪些?
(1)它是基於組件技術的。所有的應用對象,不管控制器和視圖,仍是業務對象之類的都是 java組件.而且和Spring提供的其餘基礎結構緊密集成.
(2)
不依賴於Servlet API(目標雖是如此,可是在實現的時候確實是依賴於Servlet的)
(3)能夠任意使用各類視圖技術,而不只僅侷限於JSP
(4) 支持各類請求資源的映射策略
(5)它應是易於擴展的
今天的分享就到這裏啦,歡迎你們點贊、轉發、留言、拍磚~