Spring Boot管理Spring MVC

Spring Boot真正的核心功能是自動配置和快速整合,通常Spring Boot應用的前端MVC框架依然使用Spring MVC。Spring Boot提供的spring-boot-starter-web啟動器嵌入了Spring MVC的依賴,并為Spring MVC提供了大量自動配置,可以適用于大多數Web開發場景。 除了使用自動配置所提供的功能,開發者也可以通過自定義配置類定制Spring MVC的配置。

Spring Boot為Spring MVC自動配置提供的特性

在Spring Boot項目中,一旦引入了Web依賴啟動器spring-boot-starter-web,那么Spring Boot整合Spring MVC框架默認實現的一些XxxAutoConfiguration自動配置類就會自動生效,幾乎可以在無任何額外配置的情況下進行Web開發。

Spring Boot為Spring MVC提供了自動配置,并在Spring MVC默認功能的基礎上添加了以下特性。

(1)引入了視圖解析器 ContentNegotiatingViewResolver和BeanNameViewResolver。

(2)為包括WebJars在內的靜態資源提供支持。

(3)自動注冊 Converter、GenericConverter和Formatter。

(4)支持使用HttpMessageConverters消息轉換器。

(5)自動注冊 MessageCodesResolver。

(6)支持靜態項目首頁index.html。

(7)支持定制應用圖標favicon.ico。

(8)自動初始化Web數據綁定器ConfigurableWebBindingInitializer。

自定義Spring MVC配置

在Spring Boot應用中使用Spring MVC時,如果希望在為Spring MVC自動配置提供相關特性的同時,再增加一些自定義的Spring MVC配置,例如添加攔截器、視圖控制器等,可以通過自定義WebMvcConfigurer類型的配置類來實現。

1.配置靜態資源映射

通常Web應用中會需要使用靜態資源,例如,JavaScript文件、CSS文件和HTML文件等。單獨使用Spring MVC時,導入靜態資源文件后,需要配置靜態資源的映射,否則無法正常訪問。Spring Boot中提供了默認的靜態資源映射,當訪問項目中任意的靜態資源時,Spring Boot會默認從以下路徑中從上往下進行查找:

(1)classpath:/META-INF/resources/

(2)classpath:/resources/

(3)classpath:/static/

(4)classpath:/public/

這個查找順序可以通過源碼查看:WebMvcAutoConfiguration--》搜索getStaticLocations--》進入該方法--》尋著軌跡就能找到。

修改靜態資源存放位置:

spring.resources.static-locations=字符串數組

例如:

在chapter03項目中的 src/main/resources/static和 src/main/resources目錄下分別創建main.html文件和index.html文件,并在項目啟動后分別在瀏覽器中對這兩個靜態資源進行訪問。

如果想訪問非默認靜態資源文件夾下的資源,可以通過配置類和配置文件2種方式實現自定義靜態資源的映射。

(1)通過配置類實現靜態資源映射

配置類需要實現WebMvcConfigurer接口,在重寫該接口的addResourceHandlers()方法中指定資源訪問路徑和資源之間的映射關系。

(2)通過配置文件實現靜態資源映射

Spring Boot在Spring MVC的自動配置中提供了對應的屬性可以配置靜態資源訪問路徑和資源的映射。

下面以通過配置類實現靜態資源映射為例,演示配置靜態資源映射。

(1)創建靜態資源。

在src/main/resources目錄下,創建文件夾backend,并在文件夾中創建HTML文件index.html和login.htm。

(2)配置靜態資源映射。

在config子包下創建配置類WebMvcConfig,該配置類實現WebMvcConfigurer接口,并重寫該接口的方法實現自定義Spring MVC的配置,具體如文件3-11所示。

import  org.springframework.context.annotation.Configuration;
import  org.springframework.web.servlet.config.annotation.
ResourceHandlerRegistry;
import  org.springframework.web.servlet.config.annotation.
WebMvcConfigurer;
@Configuration
public  class  WebMvcConfig implements  WebMvcConfigurer {@Overridepublic  void  addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");}}

?(3)測試程序效果。啟動項目,在瀏覽器中訪問backend文件夾下的index.html。

2.配置視圖控制器

使用Spring MVC默認的配置進行開發時,如果僅實現無業務邏輯的頁面跳轉,也需要創建Controller類,然后定義方法跳轉到頁面,操作比較麻煩。對此,可以在視圖控制器中添加自定義的映射,直接將請求映射為視圖。

下面通過案例演示在視圖控制器中配置請求和視圖的映射,具體如下。

(1)配置視圖控制器映射信息。在文件3-11中重寫WebMvcConfigurer接口的addViewControllers()方法,在該方法中添加訪問路徑和視圖的映射。

@Override
public void addViewControllers(ViewControllerRegistry registry) {/*如果在thymeleaf中會出錯,因為配置了前綴和后綴,*視圖名"/backend/login.html"加上前綴后綴后,這個地址肯定不存在,*直接寫邏輯視圖名即可*/	    //registry.addViewController("/backend/toLoginPage").setViewName("/backend/login.html");//registry.addViewController("/backend").setViewName("/backend/index.html");//在thymeleaf環境下訪問模板頁面registry.addViewController("/backend/toLoginPage2").setViewName("login");registry.addViewController("/backend").setViewName("index");
}

(2)測試程序效果。啟動項目,在瀏覽器中訪問http://localhost:8080/backend/toLoginPage2。

總結:只適合較為簡單的無參數get請求跳轉,對于有參數或者需要業務處理的跳轉需求,最好采用傳統方式。

3.配置攔截器

攔截器可以根據請求的URL對請求進行攔截,主要應用于登錄校驗、權限驗證、亂碼解決、性能監控和異常處理等方面。在Spring Boot項目中配置攔截器也非常簡單,只需要定義攔截器和注冊攔截器即可。?

攔截過程

下面通過案例演示在Spring Boot項目中配置攔截器。

(1)定義攔截器。創建interceptor子包,在該包下創建攔截器類,該類實現了 HandlerInterceptor接口,并重寫了接口的preHandle()方法,具體如文件3-12所示。

@Component
public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {// 獲取請求路徑String requestURI = request.getRequestURI();// 獲取登錄用戶Object loginUser = request.getSession().getAttribute("loginUser");// 如果請求路徑是"/backend"開頭的,并且用戶沒有登錄,//那么將請求重定向到登錄頁面或者內部轉發if (requestURI.startsWith("/backend") && loginUser == null) {response.sendRedirect("/toLoginPage");//request.getRequestDispatcher("/toLoginPage").forward(request,response);return false;}return true;}}

(2)注冊攔截器。

在文件3-11中重寫WebMvcConfigurer接口的addInterceptors()方法,在該方法中添加攔截器。

    @Autowiredprivate LoginInterceptor loginInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/toLoginPage");}

(3)效果測試

重啟項目,啟動成功后,在瀏覽器上訪問http://localhost:8080/backend

動手試一試

不攔截靜態資源,比如圖片,css 。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76144.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76144.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76144.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

1.凸包、極點、極邊基礎概念

目錄 1.凸包 2.調色問題 3.極性(Extrem) 4.凸組合(Convex Combination) 5.問題轉化(Strategy)?編輯 6.In-Triangle test 7.To-Left-test 8.極邊(Extream Edges) 1.凸包 凸包就是上面藍色皮筋圍出來的范圍 這些釘子可以轉換到坐標軸中&#xff0…

《如何用 Function 實現動態配置驅動的處理器注冊機制?》

大家好呀!👋 今天我們來聊聊一個超實用的技術話題 - 如何用Java的Function接口實現動態配置驅動的處理器注冊機制。聽起來很高大上?別擔心,我會用最簡單的方式講清楚!😊 一、為什么要用Function實現處理器…

【最新版】蕓眾商城獨立版源碼 425+插件 全新后臺框架

一.系統介紹 蕓眾商城系統最新版 已經更新425全插件版,一套系統支持各種新零售、商城、模式,天天美麗鏈動商城。不要相信那些外面的舊版本。舊版本等于是廢品,無法小程序運營的,框架還是舊的! 蕓眾系統最新版 服務器可…

java 設計模式之單例模式

簡介 單例模式:一個類有且僅有一個實例,該類負責創建自己的對象,同時確保只有一個對象被創建。 特點:類構造器私有、持有自己實例、對外提供獲取實例的靜態方法。 單例模式的實現方式 餓漢式 類被加載時,就會實例…

Milvus 索引如何選擇

以下是幾種索引類型的特點及適用場景,可據此選擇: AUTOINDEX 特點:數據庫自動選擇合適索引類型,無需深入了解索引細節。適用場景:對索引知識了解有限,或不確定哪種索引適合當前數據和查詢需求&#xff0c…

CentOS 7 安裝教程

準備: 軟件:VMware Workstation 鏡像文件:CentOS-7-x86_64-bin-DVD1.iso (附:教程較為詳細,注釋較多,故將操作的選項進行了加粗字體顯示。) 1、文件–新建虛擬機–自定義 2、硬盤…

TAS啟動與卸載

3. 啟動TAS(Thin-Agent服務) TAS在安裝完成后通常會自動啟動,并在系統重啟時自啟。如需手動啟動,請按以下步驟操作:  3.1 在Windows上啟動TAS 1. 打開 Windows服務管理器: ? 按下 Win R&…

Redis面試——數據結構

一、SDS如何防止緩沖區溢出? Redis 的 String 類型通過 SDS(Simple Dynamic String)來防止緩沖區溢出,具體機制如下: Redis 的 String 類型底層采用 SDS 實現,即 Simple Dynamic StringSDS 底層維護的數據…

Doris的向量化執行如何支撐分布式架構和復雜查詢

Doris 的向量化執行能力與其 分布式架構 和 復雜查詢優化 深度結合,通過 批處理 列式計算 分布式調度 的協同設計,解決傳統分布式數據庫在復雜查詢場景下的性能瓶頸。以下是具體原理展開: 一、向量化如何適配分布式架構? Doris…

DataInputStream 終極解析與記憶指南

DataInputStream 終極解析與記憶指南 一、核心本質 DataInputStream 是 Java 提供的數據字節輸入流,繼承自 FilterInputStream,用于讀取基本數據類型和字符串的二進制數據。 作用:1.專門用來讀取使用DataOutputStream流寫入的文件 注意:讀取的順序要和寫入的順序一致(…

云轉型(cloud transformation)——不僅僅是簡單的基礎設施遷移

李升偉 編譯 云轉型不僅僅是遷移基礎設施,更是重塑企業運營、創新及價值交付的方式。它具有戰略性、持續性,并影響著人員、流程和平臺。 ?? 云轉型涉及以下內容: 🔄 應用現代化——從單體架構轉向微服務架構。 ?? 運營自動…

Java HTTP Client API詳解

Java HTTP Client API詳解 Java的HTTP客戶端API經歷了多次演進,從早期的HttpURLConnection到第三方庫如Apache HttpClient,再到Java 11引入的標準HttpClient。本文將全面解析Java中主要的HTTP客戶端API,包括特性對比、使用方法和最佳實踐。 …

如何深入理解引用監視器,安全標識以及訪問控制模型與資產安全之間的關系

一、核心概念總結 安全標識(策略決策的 “信息載體) 是主體(如用戶、進程)和客體(如文件、數據庫、設備)的安全屬性,用于標記其安全等級、權限、訪問能力或受保護級別,即用于標識其安全等級、權限范圍或約束…

京東3D空間視頻生成技術探索與應用

1. 背景 近年來,隨著社交媒體、流媒體平臺以及XR設備的快速發展,沉浸式3D空間視頻的需求迅猛增長,尤其是在短視頻、直播和電影領域,正在重新定義觀眾的觀看體驗。2023年,蘋果公司發布的空間視頻技術為這一趨勢注入了新…

驚爆!Cursor 限制多設備登錄,網友瘋狂吐槽,退訂潮洶涌來襲,直呼:沒理由再給它掏錢!

大家好,我是小程程。 吃瓜吃瓜,知名 AI 編程工具 Cursor 惹事了! ① 遭遇強制登出 前幾天有 Cursor 用戶發現,自己要是從多臺設備登錄,就會被強制下線。 比方說,你正在臺式電腦上干活,中途換到筆…

React JSX 語法深度解析與最佳實踐

本文系統梳理 JSX 語法的完整知識體系。通過原理剖析、代碼示例和開發警示&#xff0c;幫助開發者建立嚴謹的 JSX 使用認知。 一、JSX 本質解析 1.1 編譯機制 JSX 通過 Babel 轉換為 React.createElement 調用&#xff0c;以下為轉換對照&#xff1a; // 原始 JSX <MyCo…

若依改用EasyCaptcha驗證碼

若依自帶的驗證碼樣式比較單一&#xff0c;所以想改用EasyCaptcha驗證碼&#xff0c;另外EasyCaptcha算術驗證碼可能會有負數&#xff0c;輸入時需要寫負號&#xff0c;比較麻煩&#xff0c;所以使用一個簡單的方法過濾掉負數結果 原本的驗證碼依賴和代碼可刪可不刪&#xff0c…

趣味編程之go與rust的愛恨情仇

聲明:此篇文章利用deepseek生成。 第一章&#xff1a;出身之謎 Go&#xff08;江湖人稱"高小戈"&#xff09;是名門之后——谷歌家的三少爺。生來就帶著"簡單粗暴"的家族基因&#xff0c;口號是**“少寫代碼多搬磚&#xff0c;并發處理賽神仙”**。它爹Ro…

【cocos creator 3.x】速通3d模型導入, 模型創建,陰影,材質使用,模型貼圖綁定

1、右鍵創建平面&#xff0c;立方體 2、點擊場景根節點&#xff0c;shadows勾選enabled3、點擊燈光&#xff0c;shadow enabled勾選 4、點擊模型&#xff0c;勾選接收陰影&#xff0c;投射陰影&#xff08;按照需要勾選&#xff09; 5、材質創建 6、選中節點&#xff0c;找…

告別昂貴語音合成服務!用GPT-SoVITS生成你的個性化AI語音

文章目錄 前言1.GPT-SoVITS V2下載2.本地運行GPT-SoVITS V23.簡單使用演示4.安裝內網穿透工具4.1 創建遠程連接公網地址 5. 固定遠程訪問公網地址 前言 今天給大家介紹一款AI語音克隆工具——GPT-SoVITS。這款由花兒不哭大佬開發的工具是一款強大的訓練聲音模型與音頻生成工具…