前端控制器DispatcherServlet 詳解


 

DispatcherServlet 是前端控制器設計模式的實現,提供 Spring Web MVC 的集中訪問點,而且負責職責的分派,而且與 Spring IoC 容器無縫集成,從而可以獲得 Spring 的所有好處

 

DispatcherServlet 主要用作職責調度工作,本身主要用於控制流程,主要職責如下:

1、文件上傳解析,如果請求類型是 multipart 將通過 MultipartResolver 進行文件上傳解析;

2、通過 HandlerMapping,將請求映射到處理器(返回一個 HandlerExecutionChain ,它包括一個處理器、多個

HandlerInterceptor 攔截器);

3 通過 HandlerAdapter 支持多種類型的處理器(HandlerExecutionChain 中的處理器)4、通過 ViewResolver 解析邏輯視圖名到具體視圖實現;5、本地化解析;6、渲染具體的視圖等;

4、如果執行過程中遇到異常將交給 HandlerExceptionResolver 來解析。

 

從以上我們可以看出 DispatcherServlet 主要負責流程的控制(而且在流程中的每個關鍵點都是很容易擴展的)。

 

 

 

上下文關系

 

創建完畢后會將該上下文放在 ServletContext

servletContext.setAttribute( WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context);

 

從圖中可以看出:

 

ContextLoaderListener 初始化的上下文加載的 Bean 是對於整個應用程序共享的,不管是使用什么表現層技術,一般如 DAO 層、Service  Bean

 

DispatcherServlet 初始化的上下文加載的 Bean 是只對 Spring Web MVC 有效的 Bean,如 ControllerHandlerMappingHandlerAdapter 等等,該初始化上下文應該只加載 Web 相關組件。

 

 

DispatcherServlet 初始化順序

 

initWebApplicationContext()方法可以看出,基本上如果 ContextLoaderListener 加載了上下文將作為根上下文(DispatcherServlet 的父容器)。

 

 

 

 

 

DispatcherServlet 默認配置

 

DispatcherServlet 的默認配置在 DispatcherServlet.properties(和 DispatcherServlet 類在一個包下)中,而且是當 Spring

 

配置文件中沒有指定配置時使用的默認策略:

 

從如上配置可以看出 DispatcherServlet 在啟動時會自動注冊這些特殊的 Bean,無需我們注冊,如果我們注冊了,默認的將不會注冊。

因此如第二章的 BeanNameUrlHandlerMappingSimpleControllerHandlerAdapter 是不需要注冊的,DispatcherServlet 

認會注冊這兩個 Bean

DispatcherServlet.properties 可以看出有許多特殊的 Bean,那接下來我們就看看 Spring Web MVC 主要有哪些特殊的Bean

 

 

DispatcherServlet 中使用的特殊的 Bean

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM