一、 用戶發送請求至前端控制器DispatcherServlet
二、 DispatcherServlet收到請求調用HandlerMapping處理器映射器。
三、 HandlerMapping處理器映射器根據請求url找到具體的處理器,生成處理器對象及處理器攔截器(若是有則生成)一併返回給DispatcherServlet。
四、 DispatcherServlet經過HandlerAdapter處理器適配器調用處理器
五、 執行處理器(Controller,也叫後端控制器)。
六、 Controller執行完成返回ModelAndView
七、 HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet
八、 DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器
九、 ViewReslover解析後返回具體View
十、 DispatcherServlet對View進行渲染視圖(即將模型數據填充至視圖中)。
十一、 DispatcherServlet響應用戶前端
如下組件一般使用框架提供實現:程序員
DispatcherServlet:前端控制器web
用戶請求到達前端控制器,它就至關於mvc模式中的c,dispatcherServlet是整個流程控制的中心,由它調用其它組件處理用戶的請求,dispatcherServlet的存在下降了組件之間的耦合性。spring
HandlerMapping:處理器映射器後端
HandlerMapping負責根據用戶請求找到Handler即處理器,springmvc提供了不一樣的映射器實現不一樣的映射方式,例如:配置文件方式,實現接口方式,註解方式等。架構
Handler:處理器mvc
Handler 是繼DispatcherServlet前端控制器的後端控制器,在DispatcherServlet的控制下Handler對具體的用戶請求進行處理。
因爲Handler涉及到具體的用戶業務請求,因此通常狀況須要程序員根據業務需求開發Handler。app
HandlerAdapter:處理器適配器框架
經過HandlerAdapter對處理器進行執行,這是適配器模式的應用,經過擴展適配器能夠對更多類型的處理器進行執行。jsp
View Resolver:視圖解析器
View Resolver負責將處理結果生成View視圖,View Resolver首先根據邏輯視圖名解析成物理視圖名即具體的頁面地址,再生成View視圖對象,最後對View進行渲染將處理結果經過頁面展現給用戶。
View:視圖
springmvc框架提供了不少的View視圖類型的支持,包括:jstlView、freemarkerView、pdfView等。咱們最經常使用的視圖就是jsp。
通常狀況下須要經過頁面標籤或頁面模版技術將模型數據經過頁面展現給用戶,須要由程序員根據業務需求開發具體的頁面。
說明:在springmvc的各個組件中,處理器映射器、處理器適配器、視圖解析器
稱爲springmvc的三大組件。
須要用戶開放的組件有handler、view
使用組件掃描器省去在spring容器配置每一個controller類的繁瑣。使用<context:component-scan>自動掃描標記@controller的控制器類,配置以下:
<!-- 掃描controller註解,多個包中間使用半角逗號分隔 --> <context:component-scan base-package="com.wesley.springmvc.controller.first"/>
註解式處理器映射器,對類中標記@ResquestMapping的方法進行映射,根據ResquestMapping定義的url匹配ResquestMapping標記的方法,匹配成功返回HandlerMethod對象給前端控制器,HandlerMethod對象中封裝url對應的方法Method。
從spring3.1版本開始,廢除了DefaultAnnotationHandlerMapping的使用,推薦使用RequestMappingHandlerMapping完成註解式處理器映射。
配置以下:
<!--註解映射器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
註解描述:
@RequestMapping:定義請求url處處理器功能方法的映射
註解式處理器適配器,對標記@ResquestMapping的方法進行適配。
從spring3.1版本開始,廢除了AnnotationMethodHandlerAdapter的使用,推薦使用RequestMappingHandlerAdapter完成註解式處理器適配。
配置以下:
<!--註解適配器 --> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
springmvc使用 <mvc:annotation-driven>
自動加載RequestMappingHandlerMapping和RequestMappingHandlerAdapter,可用在springmvc.xml配置文件中使用<mvc:annotation-driven>
替代註解處理器和適配器的配置。
在springmvc.xml文件配置以下:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean>
InternalResourceViewResolver:支持JSP視圖解析viewClass:JstlView表示JSP模板頁面須要使用JSTL標籤庫,因此classpath中必須包含jstl的相關jar 包。此屬性能夠不設置,默認爲JstlView。prefix 和suffix:查找視圖頁面的前綴和後綴,最終視圖的址爲:前綴+邏輯視圖名+後綴,邏輯視圖名須要在controller中返回ModelAndView指定,好比邏輯視圖名爲hello,則最終返回的jsp視圖地址 「WEB-INF/jsp/hello.jsp」