Spring MVC 中的檢視解析
歡迎參閱本 Spring MVC 中利用 ViewResolver 介面的綜合指南。作為 Spring MVC 框架的核心元件,ViewResolver 在把檢視名稱對映到實際檢視方面起著至關重要的作用。無論你是 Spring MVC 初學者,還是想複習一下你的理解,本文都旨在提供全面詳細的 ViewResolver
理解 Spring MVC 中的 ViewResolver
在 Spring MVC 中,ViewResolver 介面協助把控制器返回的邏輯檢視名稱對映到實際檢視物件,例如 JSP 或 Thymeleaf 模板。它形成 MVC 架構的控制器和檢視元件之間的橋樑,根據邏輯檢視名稱確定要顯示哪個檢視
Spring MVC 流程中 ViewResolver 的作用
Spring MVC 應用程式處理請求時,請求由 DispatcherServlet 接收,其隨後將請求路由到合適的控制器。控制器執行所需的業務邏輯,並返回包含模型資料和檢視邏輯名稱的 ModelAndView 物件
這個邏輯檢視名稱傳遞到 ViewResolver,然後將其解析為特定的檢視技術,例如 JSP、Thymeleaf 或 FreeMarker。DispatcherServlet 會把此檢視和模型資料一起呈現在客戶端。
實現 ViewResolver:分步驟指南
既然我們已經瞭解了 ViewResolver 的概念,現在讓我們看看如何在 Spring MVC 應用程式中實現它。
步驟 1 − 設定專案
使用 Spring Boot Initializer 或 Spring STS 建立新的 Spring MVC 專案。包括 Spring Web MVC 和 Thymeleaf 等必要的依賴項
步驟 2 − 配置 ViewResolver
在典型的 Spring MVC 應用程式中,ViewResolver 是在應用程式的配置類中配置的,該類用 @Configuration 註釋。以下是用 InternalResourceViewResolver 為 JSP 檢視配置 ViewResolver 的示例
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example.demo")
public class AppConfig implements WebMvcConfigurer {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setOrder(1);
return resolver;
}
}
在上面的程式碼中,我們設定了字首和字尾以表示我們的檢視是位於 /WEB-INF/views/ 目錄中的 JSP 檔案。setOrder(1) 方法設定此 ViewResolver 的優先順序。
步驟 3 − 建立控制器
接下來,我們將建立一個返回 ModelAndView 物件的控制器。此處返回的邏輯檢視名稱將由我們的 ViewResolver 解析
@Controller
public class HomeController {
@RequestMapping("/")
public ModelAndView home() {
ModelAndView modelAndView = new ModelAndView("home");
modelAndView.addObject("message", "Welcome to Spring MVC!");
return modelAndView;
}
}
在上面的程式碼中,“home”是邏輯檢視名稱。我們的 ViewResolver 將此解析為 /WEB-INF/views/home.jsp。
步驟 4 − 建立檢視
最後,在 /WEB-INF/views/ 目錄中建立一個名為 home.jsp 的 JSP 檔案。這是將呈現給使用者的檢視。
多個 ViewResolver
在更復雜的應用程式中,你可能希望使用多個 ViewResolver。例如,你可能希望對某些檢視使用 Thymeleaf,對其他檢視使用 JSP。在此方案中,你可以配置多個 ViewResolver 並使用 setOrder() 方法設定它們的優先順序。順序值最低的 ViewResolver 優先順序最高。如果某個 ViewResolver 無法解析某個檢視,將會嘗試按順序下一個 ViewResolver。
自定義 ViewResolver
雖然 Spring 為大多數流行的檢視技術提供了開箱即用的 ViewResolver 實現,但你有時可能需要建立一個自定義 ViewResolver。如果你正在使用 Spring 開箱即不支援的檢視技術,或者你需要更多控制如何解析檢視的方式,則此方法會很有用。
要建立一個自定義 ViewResolver,你需要建立一個實現 ViewResolver 介面並重寫 resolveViewName() 方法的類。以下是一個簡單的示例 −
public class CustomViewResolver implements ViewResolver {
@Override
public View resolveViewName(String viewName, Locale locale) throws Exception {
// Custom logic to resolve view
}
}
在 resolveViewName() 方法中,你可以實現用於解析檢視的自定義邏輯。完成後,你可以像其他任何 ViewResolver 一樣將 CustomViewResolver 新增到應用程式的配置中
結論
Spring MVC 中的 ViewResolver 是一個至關重要的元件,它連結了 MVC 架構的控制器層和檢視層。理解如何有效地配置和使用 ViewResolver 極大地提高了建立強大而靈活的 Spring MVC 應用程式的能力。
由於開箱即用支援廣泛的檢視技術,以及實現自定義檢視解析策略的靈活性,ViewResolver 介面完美地詮釋了 Spring 的“使常見情形容易,使複雜情形成為可能”的理念。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP