一、JavaEE體系結構
二、mvc 設計模式|思想
Model 模型層 (javaBean元件 = 領域模型(javaBean) + 業務層 + 持久層)
View 檢視層( html、jsp…)
Controller 控制層(委託模型層進行資料處理)
複製程式碼
三、springmvc簡介
springmvc是一個web層mvc框架,類似struts2。
複製程式碼
四、springmvc和spring之間關係
springmvc是spring的部分,其實就是spring在原有基礎上,又提供了web應用的mvc模組。
複製程式碼
五、sprigmvc和struts2的比較
實現機制:
struts2是基於過濾器實現的。
springmvc是基於servlet實現的。
執行速度:
因為過濾器底層是servlet,所以springmvc的執行速度會稍微比structs2快。
struts2是多例的
springmvc單例的
引數封裝:
struts2引數封裝是基於屬性進行封裝。
springmvc是基於方法封裝。顆粒度更細。
複製程式碼
六、springmvc的工作原理圖
七、springmvc具體流程步驟
⑴ 使用者傳送請求至DispatcherServlet。
⑵ DispatcherServlet收到請求呼叫HandlerMapping查詢具體的Handler。
⑶ HandlerMapping找到具體的處理器(具體配置的是哪個處理器的實現類),生成處理器物件及處理器攔截器(HandlerExcutorChain包含了Handler以及攔截器集合)返回給DispatcherServlet。
⑷ DispatcherServlet接收到HandlerMapping返回的HandlerExcutorChain後,呼叫HandlerAdapter請求執行具體的Handler(Controller)。
⑸ HandlerAdapter經過適配呼叫具體的Handler(Controller即後端控制器)。
⑹ Controller執行完成返回ModelAndView(其中包含邏輯檢視和資料)給HandlerAdaptor。
⑺ HandlerAdaptor再將ModelAndView返回給DispatcherServlet。
⑻ DispatcherServlet請求檢視解析器ViewReslover解析ModelAndView。
⑼ ViewReslover解析後返回具體View(物理檢視)到DispatcherServlet。
⑽ DispatcherServlet請求渲染檢視(即將模型資料填充至檢視中) 根據View進行渲染檢視。
⑾ 將渲染後的檢視返回給DispatcherServlet。
⑿ DispatcherServlet將響應結果返回給使用者。
複製程式碼
八、springmvc核心元件說明
(1)前端控制器DispatcherServlet(配置即可)
功能:中央處理器,接收請求,自己不做任何處理,而是將請求傳送給其他元件進行處理。DispatcherServlet 是整個流程的控制中心。
(2)處理器對映器HandlerMapping(配置即可)
功能:根據DispatcherServlet傳送的url請求路徑查詢Handler
常見的處理器對映器:BeanNameUrlHandlerMapping,SimpleUrlHandlerMapping,
ControllerClassNameHandlerMapping,DefaultAnnotationHandlerMapping(不建議使用)
(3)處理器介面卡HandlerAdapter(配置即可)
功能:按照特定規則(HandlerAdapter要求的規則)去執行Handler。
通過HandlerAdapter對處理器進行執行,這是介面卡模式的應用,通過擴充套件多個介面卡對更多型別的處理器進行執行。
常見的處理器介面卡:HttpRequestHandlerAdapter,SimpleControllerHandlerAdapter,AnnotationMethodHandlerAdapter
(4)處理器Handler即Controller(程式猿編寫)
功能:編寫Handler時按照HandlerAdapter的要求去做,這樣介面卡才可以去正確執行Handler。
(5)檢視解析器ViewReslover(配置即可)
功能:進行檢視解析,根據邏輯檢視名解析成真正的檢視。
ViewResolver負責將處理結果生成View檢視,ViewResolver首先根據邏輯檢視名解析成物理檢視名即具體的頁面地址,再生成View檢視物件,最後對View進行渲染將處理結果通過頁面展示給使用者。
springmvc框架提供了多種View檢視型別,如:jstlView、freemarkerView、pdfView...
(6)檢視View(程式猿編寫)
View是一個介面,實現類支援不同的View型別(jsp、freemarker、pdf...)
複製程式碼
九、springmvc入門案例
- 建立一個maven工程
- 配置pom.xml
引入相關依賴:spring的基本包、springmvc需要的spring-webmvc,日誌相關的slf4j-log4j12,jsp相關的jstl、servlet-api、jsp-api。
- 配置web.xml
因為DispatcherServlet本身就是一個Servlet,所以需要在web.xml配置。
- 配置springmvc.xml
一、使用預設載入springmvc配置檔案的方式,必須按照以下規範:
①命名規則:-servlet.xml ====> springmvc-servlet.xml
②路徑規則:-servlet.xml必須放在WEB-INF下邊
二、如果要不按照預設載入位置,則需要在web.xml中通過標籤來指定springmvc配置檔案的載入路徑,如上圖所示。
- 自定義Controller(處理器)
將自定義的 Controller 處理器配置到 spring 容器中交由 spring 容器來管理,因為這裡的 springmvc.xml 配置檔案中處理器對映器配置的是 BeanNameUrlHandlerMapping ,根據名字可知這個處理器對映器是根據 bean (自定義Controller) 的 name 屬性值url去尋找執行類 Handler(Controller) , 所以bean的name屬性值即是要和使用者傳送的請求路徑匹配的 url 。
- 定義檢視頁面
根據檢視解析路徑:WEB-INF/jsps/index.jsp
- 根據程式碼分析springmvc執行流程
- 處理器對映器(配置多個處理器對映器可以共存)
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
複製程式碼
功能:根據bean(自定義Controller)的name屬性的url去尋找執行類Controller。
- 處理器介面卡(配置多個處理器介面卡可以共存)
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
複製程式碼
功能:自定義的處理器(Controller)實現了Controller介面時,介面卡就會執行Controller的具體方法。
- 處理器介面卡原始碼SimpleControllerHandlerAdapter
Controller介面中有一個方法叫handleRequest,也就是處理器方法。
因此,自定義的Controller要想被呼叫就必須實現Controller介面,重寫Controller介面中的處理器方法。
- 新增日誌
- 執行結果
如果覺得這篇文章對你有幫助
麻煩幫忙點個贊或關注
這對我來說是一種很好的鼓勵
在此先謝謝各位
O(∩_∩)O
複製程式碼