架構結構
架構結構如下圖:
架構流程
- 使用者發送請求至前端控制器DispatcherServlet
- DispatcherServlet收到請求調用HandlerMapping處理器映射器
- 處理器映射器根據請求url找到具體的處理器,生成處理器對象及處理器攔截器(如果有則生成)一并傳回給DispatcherServlet
- DispatcherServlet通過HandlerAdapter處理器擴充卡調用處理器
- 執行處理器(Controller,也叫後端控制器),Controller執行完成傳回ModelAndView
- HandlerAdapter将controller執行結果ModelAndView傳回給DispatcherServlet
- DispatcherServlet将ModelAndView傳給ViewReslover視圖解析器
- ViewReslover解析後傳回具體View
- DispatcherServlet對View進行渲染視圖(即将模型資料填充至視圖中)
- DispatcherServlet響應使用者
元件說明
以下元件通常使用架構提供實作:
DispatcherServlet:前端控制器
使用者請求到達前端控制器,它就相當于mvc模式中的c,dispatcherServlet是整個流程控制的中心,由它調用其它元件處理使用者的請求,dispatcherServlet的存在降低了元件之間的耦合性。
HandlerMapping:處理器映射器
HandlerMapping負責根據使用者請求url找到Handler即處理器,springmvc提供了不同的映射器實作不同的映射方式,例如:配置檔案方式,實作接口方式,注解方式等。
Handler:處理器
Handler 是繼DispatcherServlet前端控制器的後端控制器,在DispatcherServlet的控制下Handler對具體的使用者請求進行處理。
由于Handler涉及到具體的使用者業務請求,是以一般情況需要程式員根據業務需求開發Handler。
HandlAdapter:處理器擴充卡
通過HandlerAdapter對處理器進行執行,這是擴充卡模式的應用,通過擴充擴充卡可以對更多類型的處理器進行執行。
ViewResolver:視圖解析器
View Resolver負責将處理結果生成View視圖,View Resolver首先根據邏輯視圖名解析成實體視圖名即具體的頁面位址,再生成View視圖對象,最後對View進行渲染将處理結果通過頁面展示給使用者。
View:視圖
springmvc架構提供了很多的View視圖類型的支援,包括:jstlView、freemarkerView、pdfView等。我們最常用的視圖就是jsp。
一般情況下需要通過頁面标簽或頁面模版技術将模型資料通過頁面展示給使用者,需要由程式員根據業務需求開發具體的頁面。
說明:
在springmvc的各個元件中,處理器映射器、處理器擴充卡、視圖解析器稱為springmvc的三大元件。
需要使用者開發的元件有handler、view
預設加載的元件
我們沒有做任何配置,就可以使用這些元件
因為架構已經預設加載這些元件了,配置檔案位置如下圖:
# Default implementation classes for DispatcherServlet's strategy interfaces.
# Used as fallback when no matching beans are found in the DispatcherServlet context.
# Not meant to be customized by application developers.
org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver
org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver
org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\
org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver
org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator
org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver
org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager