1. 程式人生 > >Spring 檢視和檢視解析器簡介

Spring 檢視和檢視解析器簡介

什麼是 Spring 檢視和檢視解析器?

Spring MVC(Model View Controller)是 Spring 中一個重要的組成部分,而 Spring 檢視和檢視解析器則是 Spring MVC 中的組成部分。在介紹 Spring 檢視和檢視解析器前,我們先了解下在 Spring MVC 框架中,一個 Web 請求所需經歷的六個階段:

  1. 請求會首先被 Spring MVC 的前端請求分發器(Dispatcher)攔截。該攔截器是一個 Servlet, 需要在 web.xml 中配置,所有符合所配置的 URL 樣式的訪問請求,將都會被該攔截器攔截。Spring 提供了預設的分發器 org.springframework.web.servlet.DispatcherServlet,您可以根據需要,決定是否需要定製自己的分發器。
  2. 在接收到訪問請求後,分發器會根據開發人員在 Spring 配置檔案或程式碼中的註解(Annotation),來查詢合適的控制器。
  3. 分發器在查詢到合適的控制器後,將請求轉交給該控制器處理。
  4. 通常,控制器會呼叫相應服務類來處理業務邏輯,在將請求處理後,控制器需返回處理後的結果資料模型(Model)以及下一個需要顯示的檢視名。
  5. 在控制器處理結束並返回模型和檢視名之後,Spring 會依次呼叫 Spring 容器中所註冊的檢視解析器,來查詢符合條件的檢視。
  6. 在獲得 Spring 檢視後,Spring 會根據該檢視的配置資訊,顯示該檢視。

圖 1.Spring MVC 處理流程
這裡寫圖片描述
通過以上 Spring MVC 的介紹,我們可以發現,檢視和檢視解析器將出現在整個請求處理流程中的最後部分。那麼到底什麼是檢視和檢視解析器?簡而言之,檢視是指 Spring MVC 中的 V(View),而檢視解析器的功能則是依據指定的規則來查詢相應的檢視。

常用檢視和檢視解析器簡介

在開發中,檢視通常就是 JSP、Velocity 等。Spring 預設提供了多種檢視解析器,比如,我們可以使用最常用解析器 InternalResourceViewResolver 來查詢 JSP 檢視(與之相對應的檢視類為 InternalResourceView)。通常,一個檢視解析器只能查詢一個或多個特定型別的檢視,在遇到 Spring 不支援的檢視或者我們要自定義檢視查詢規則的情況下,我們就可以通過擴充套件 Spring 來自定義自己所需的檢視解析器。目前,檢視解析器都需要實現介面 org.springframework.web.servlet.ViewResolver, 它包含方法 resolveViewName,該方法會通過檢視名查詢並返回 Spring 檢視物件。表 1 列出了常用的 Spring 檢視解析器。

表 1.Spring 常用檢視解析器列表

檢視解析器 描述
XmlViewResolver 介面 ViewResolver 的實現,從 XML 配置檔案中查詢檢視實現(預設 XML 配置檔案為 /WEB-INF/views.xml)
ResourceBundleViewResolver 介面 ViewResolver 的實現,用於從 properties 檔案中查詢檢視。
UrlBasedViewResolver 介面 ViewResolver 的實現,用於根據請求的 URL 路徑返回相應的檢視,該檢視需為抽象類 AbstractUrlBasedView 的實現,它還有些子類,如 InternalResourceView 和 JstlView 等 .
InternalResourceViewResolver UrlBasedViewResolver 的子類,通常用於查詢 JSP(類 InternalResourceView)和 JSTL(類 JstlView,InternalResourceView 的子類)等檢視。
VelocityViewResolver /FreeMarkerViewResolver UrlBasedViewResolver 的子類分別用於支援 Velocity(類 VelocityView)和 FreeMark 檢視(類 FreeMarkerView)。
ContentNegotiatingViewResolver 介面 ViewResolver 的實現,用於根據請求檔案的字尾名或請求的 header 中的 accept 欄位查詢檢視。

在多數專案中,InternalResourceViewResolver 是最常用的,該解析器可以返回指定目錄下指定字尾的檔案,它支援 JSP 及 JSTL 等檢視技術,但是用該檢視解析器時,需要注意設定好正確的優先順序,因為該檢視解析器即使沒有找到正確的檔案,也會返回一個檢視,而不是返回 null,這樣優先順序比該檢視解析器低的解析器,將不會被執行。
在 Web 開發中,我們的前端顯示可以是 JSP、Excel、Velocity 等,在 Spring 中,不同的前端顯示技術都有其對應的 Java 檢視類,正如表 1 所提到的,InternalResourceView 可以代表 JSP 檢視,FreeMarkerView 代表 FreeMarker 檢視。目前,Spring 支援多種技術開發的檢視,包括 JSP、JSTL、Excel,Velocity 等,在多數專案中,使用者並不需要自定義自己的檢視。
本文整理自:開發 Spring 自定義檢視和檢視解析器