Spring+SpringMVC+Mybatis
Spring MVC 簡介
DispatcherServlet前端控制器
SpringMVC 提供一個名為 org.springframework.web.servlet.DispatcherServlet 的 Servlet 充當前端控制器
<servlet> <!-- Servlet 的名稱 --> <servlet-name>springmvc</servlet-name> <!-- Servlet 對應的 Java 類 --> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 當前 Servlet 引數資訊 --> <init-param> <!-- contextConfigLocation 是引數名稱,該引數的值包含 SpringMVC 的配置檔案路徑 --> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-config.xml</param-value> </init-param> <!-- 在 Web 應用啟動時立即載入 Servlet --> <load-on-startup>1</load-on-startup> </servlet> <!-- 攔截所有請求 --> <servlet-mapping> <!--請求對應的 Servlet 的名稱 --> <servlet-name>springmvc</servlet-name> <!-- 監聽當前域的所有請求 --> <url-pattern>/</url-pattern> </servlet-mapping>
DispatcherServlet 載入時會需要一個 SpringMVC 的配置檔案,
預設情況下,應用會去 /WEB-INF/ 下查詢對應的 [servlet-name]-servlet.xml 檔案
SpringMVC 執行的流程
DispatcherServlet 原始碼
protected void initStrategies(ApplicationContext context) { // 初始化上傳檔案解析器 this.initMultipartResolver(context); // 初始化本地化解析器 this.initLocaleResolver(context); // 初始化主題解析器 this.initThemeResolver(context); // 初始化處理器對映器,將請求對映到處理器 this.initHandlerMappings(context); // 初始化處理器介面卡 this.initHandlerAdapters(context); // 初始化啊處理異常解析器,執行過程中遇到異常交給HandlerExceptionResolvers解析 this.initHandlerExceptionResolvers(context); // 初始化請求到檢視名稱解析器 this.initRequestToViewNameTranslator(context); // 初始化檢視解析器,通過 ViewResolvers 解析邏輯檢視名到具體檢視實現 this.initViewResolvers(context); // 初始化 flash 對映管理器 this.initFlashMapManager(context); }
org.springframework.web.servlet 路徑下有一個 DispatcherServlet .properties 配置檔案
該檔案指定了 DispatcherServlet 所使用的預設元件
一次 請求 → 響應的完整流程
①:使用者向伺服器傳送請求,請求被 Spring 的前端控制器 DispatcherServlet 截獲;
②:DispatcherServlet 對請求 URL(統一資源定位符)進行解析,得到URI(請求資源識別符號)。然後根據該 URI 呼叫
HandlerMapping 獲得該 Handler 配置的所有相關的物件,包括 Handler 物件以及 Handler 物件對應的攔截器,這些物件會被封裝到一個 HandlerExecutionChain 物件當中返回。
③:DispatcherServlet 根據獲得的 Handler,選擇一個合適的 HandlerAdapter。HandlerAdapter 的設計符合面向物件中的單一職責原則,HandlerAdapter 會被用於處理多種 Handler,呼叫 Handler 實際處理請求的方法,
④:提取請求中的資料模型,開始執行 Handler(Controller),在填充 Handler 的入參過程中,根據配置,Spring 將幫你做一些額外的工作。