SpringMVC詳解
一:MVC模式
MVC是 model、view、和controller的縮寫,分別代表web應用程序中的三種職責:
- model-模型:用於存儲數據以及能處理用戶請求的業務邏輯
- view-視圖:向控制器提交數據,顯示模型中的數據
- controller-控制器:根據視圖提出的請求,判斷將請求和數據交給哪個模型處理,處理後的有關結果交給哪個視圖更新顯示
二、SpringMVC模型
SpringMVC其實就一種基於Servlet的MVC模型:
- 模型:一個或多個javabean對象,用於存儲數據和業務邏輯。
- 視圖:一個和多個JSP頁面,想控制器提交數據和爲模型提供數據顯示,JSP頁面主要使用HTML標記和JavaBean標記來顯示數據。
- 控制器:一個或多個Servlet對象,根據視圖提交的請求進行控制,即將請求轉發給業務邏輯的javabean,並將處理記過存放到實體模型javabean中,輸出給視圖顯示。
詳細過程如下:
- 客戶端發起請求(http)通過web.xml找到 DispatchServlet(前端控制器);
- 由DispatchServlet控制器通過配置文件(servletName-servlet.xml)尋找到一個或多個
- HandlerMapping(映射處理器),找到用於處理請求的controller(後端控制器);
- DispatchServlet將請求提交到controller;
- Controller處理業務邏輯後,
- controller返回數據 ModelAndVIew給DispatchServlet;
- DispatchServlet尋找到一個或多個ViewResolver(視圖解析器),找到ModelAndVIew指定的視圖;
- DispatchServle負責將結果返給View(客戶端JSP頁面),封裝Http;
- view響應頁面的HTTP請求,返回響應數據,瀏覽器繪製頁面。
注:Dispatch [dɪˈspætʃ] 分派
三:組件
1、前端控制器DispatcherServlet(不需要工程師開發),由框架提供
作用:接收請求,響應結果,相當於轉發器,中央處理器。有了dispatcherServlet減少了其它組件之間的耦合度。
用戶請求到達前端控制器,它就相當於mvc模式中的c,dispatcherServlet是整個流程控制的中心,由它調用其它組件處理用戶的請求,dispatcherServlet的存在降低了組件之間的耦合性。
2、處理器映射器HandlerMapping(不需要工程師開發),由框架提供
作用:根據請求的url查找Handler
HandlerMapping負責根據用戶請求找到Handler即處理器,springmvc提供了不同的映射器實現不同的映射方式,例如:配置文件方式,實現接口方式,註解方式等。
3、處理器適配器HandlerAdapter
作用:按照特定規則(HandlerAdapter要求的規則)去執行Handler
通過HandlerAdapter對處理器進行執行,這是適配器模式的應用,通過擴展適配器可以對更多類型的處理器進行執行。
4、處理器Handler(需要工程師開發)
注意:編寫Handler時按照HandlerAdapter的要求去做,這樣適配器纔可以去正確執行Handler
Handler 是繼DispatcherServlet前端控制器的後端控制器,在DispatcherServlet的控制下Handler對具體的用戶請求進行處理。
由於Handler涉及到具體的用戶業務請求,所以一般情況需要工程師根據業務需求開發Handler。
5、視圖解析器View resolver(不需要工程師開發),由框架提供
作用:進行視圖解析,根據邏輯視圖名解析成真正的視圖(view)
View Resolver負責將處理結果生成View視圖,View Resolver首先根據邏輯視圖名解析成物理視圖名即具體的頁面地址,再生成View視圖對象,最後對View進行渲染將處理結果通過頁面展示給用戶。 springmvc框架提供了很多的View視圖類型,包括:jstlView、freemarkerView、pdfView等。
一般情況下需要通過頁面標籤或頁面模版技術將模型數據通過頁面展示給用戶,需要由工程師根據業務需求開發具體的頁面。
6、視圖View(需要工程師開發jsp…)
View是一個接口,實現類支持不同的View類型(jsp、freemarker、pdf…)