【SSM - SpringMVC篇】02 - SpringMVC執行流程詳解,SpringMVC三大核心元件和使用,SpringMVC標頭檔案模板

2020-10-15 12:00:19

1. SpringMVC執行流

1.1 SpringMVC三大核心元件

  1. HandlerMapping處理器對映器:建立地址與方法的對映。

HandlerMapping負責根據使用者請求url找到Handler即處理器,springmvc提供了不同的對映器實現不同的對映方式,例如:組態檔方式,實現介面方式,註解方式等。

  1. HandlerAdapter處理器介面卡:根據地址呼叫方法。

Handler 是繼DispatcherServlet前端控制器的後端控制器,在DispatcherServlet的控制下Handler對具體的使用者請求進行處理。

  1. ViewResolver 檢視解析器:處理ModelAndView資料和檢視。

ViewResolver通過HandlerAdapter對處理器進行執行,這是介面卡模式的應用,通過擴充套件介面卡可以對更多型別的處理器進行執行。

1.2 SpringMVC執行流程圖

在這裡插入圖片描述

1.3 Spring執行流程具體步驟(參考圖)

  1. 使用者傳送請求至前端控制器DispatcherServlet。
  2. DispatcherServlet收到請求呼叫HandlerMapping處理器對映器。
  3. 處理器對映器根據請求url找到具體的處理器,生成處理器物件及處理器攔截器(如果有則生成)一併返回給DispatcherServlet。
  4. DispatcherServlet通過HandlerAdapter處理器介面卡呼叫處理器。
  5. 執行處理器(Controller層,也叫後端控制器)。
  6. Controller執行完成返回資料和檢視(ModelAndView)。
  7. HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet。
  8. DispatcherServlet將ModelAndView傳給ViewReslover檢視解析器。
  9. ViewReslover解析後返回具體的View檢視(JSP / HTML)。
  10. DispatcherServlet對View進行渲染檢視(即將模型資料填充至檢視中)。
  11. DispatcherServlet響應使用者,使用者看到介面和資料。

2. 建立SpringMVC的三大元件

  SpringMVC中預設提供的三大元件有可能過時,我們可以手動設定這三大元件,一般只需要設定ViewResolver 檢視解析器,設定它的字首prefix和字尾suffix

2.1 手動一個個的設定處理器對映器(不推薦)

<!--方式1:手動一個個設定 -->
  <!-- 處理器對映器 -->
  <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

  <!--處理器介面卡-->
  <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

2.2 模型驅動設定處理器對映器和處理器介面卡,設定檢視解析器【***】

<!--方式2:設定處理器對映器和處理器介面卡 -->
  <!-- 在選擇mvc標籤時,一定要選擇最後的路徑是/mvc的選項 -->
  <!-- 這行設定可以替換掉上邊的兩行設定(一步步設定) -->
  <mvc:annotation-driven/>

  <!-- 設定檢視解析器 -->
  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<!-- 字首和字尾 相當於 //WEB-INF/jsp/Xxx.jsp--><!--定義頁面路徑的字首--><property name="prefix" value="/WEB-INF/jsp/"/><!--定義頁面路徑的字尾--><property name="suffix" value=".jsp"/>
  </bean>

2.3【注意】如果mvc標籤無效,標頭檔案模板。

<mvc:annotation-driven/>無效,可能是標頭檔案不對,下面是一個參考。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
​    http://www.springframework.org/schema/beans/spring-beans.xsd 
​    http://www.springframework.org/schema/context 
​    http://www.springframework.org/schema/context/spring-context.xsd 
​    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">