Spring MVC總結之工作原理詳解
目錄
2.Spring MVC的前端控制器(DispatcherServlet)
1.MVC思想/模式
1.1 MVC思想將一個應用分為三個基本部分:Model(模型)、View(檢視)和Controller(控制器);
1.2 在Java web 中,客戶端傳送請求,Servlet作為前端控制器(Controller) ,負責接收客戶端的請求,呼叫後端JavaBean(Model)來完成邏輯處理,最後將其轉發到相應的檢視(View)來渲染顯示;
2.Spring MVC的前端控制器(DispatcherServlet)
2.1 Spring MVC提供一個org.springframework.web.servlet.DispatcherServlet的Servlet充當前端控制器,所有的請求都由這個DispatcherServlet來分派;
2.2 配置DispatcherServlet:
<servlet> <!-- Servlet 名稱 --> <servlet-name>springmvc</servlet-name> <!-- Servlet 對應的java類 --> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- Servlet 的引數資訊,引數值為Spring MVC配置檔案路徑,預設會找/WEB-INF/[spring-name]-servlet.xml檔案--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:mvc/springmvc.xml</param-value> </init-param> <!-- 在Web應用啟動時立即載入Servlet --> <load-on-startup>1</load-on-startup> </servlet> <!-- Servlet 對映宣告 --> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- 監聽當前域.do的所以請求 --> <url-pattern>*.do</url-pattern> </servlet-mapping>
3.業務控制器Handle
3.1 DispatcherServlet前端控制器攔截到請求,請求會被分發到對應處理的Java類(Handle);Handle負責排程後臺業務邏輯程式碼類處理業務;
3.2 在Spring2.5版本前,開發Handle的唯一方法是實現Controller介面,介面必須實現handleRequest這個方法,實現Controler介面的這個類只能處理一個單一的請求動作,而在Spring 2.5之後,新增了基於註解的控制器,支援同時處理多個請求動作,也無需實現Controller和其他介面;
3.3 基於註解的控制器@Controller
1)示例:
2)修改Spring MVC配置:
<!-- 自動掃描包,SpringMVC 會將該包下用@Controller註解的類註冊為spring的控制器 -->
<context:component-scan base-package="org.demo"></context:component-scan>
<!-- 簡化SpringMVC配置,自動註冊處理器對映器和處理器介面卡兩個bean -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- FreeMarker 檢視解析器-->
<bean id="freemarkResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="contentType" value="text/html;charset=UTF-8"/>
<property name="cache" value="true" />
<property name="prefix" value="/freemarker/" />
<property name="suffix" value=".html" />
</bean>
4.Spring MVC的請求流程:
第一步: 前端控制器(DispatcherServlet)攔截請求
第二步:前端控制器請求HandlerMapping查詢Handler可以根據xml配置、註解進行查詢
第三步:處理器對映器HandlerMapping向前端控制器返回Handler
第四步:前端控制器呼叫處理器介面卡去執行Handler
第五步:處理器介面卡去執行Handler
第六步:Handler執行完成給介面卡返回ModelAndView
第七步:處理器介面卡向前端控制器返回ModelAndView。ModelAndView是springmvc框架的一個底層物件,包括 Model和view
第八步:前端控制器請求檢視解析器去進行檢視解析,根據邏輯檢視名解析成真正的檢視(jsp)
第九步:檢視解析器向前端控制器返回View
第十步:前端控制器進行檢視渲染。檢視渲染將模型資料(在ModelAndView物件中)填充到request域
第十一步:前端控制器向用戶響應結果