1. 程式人生 > 實用技巧 >Spring+SpringMVC+Mybatis

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 將幫你做一些額外的工作。