32 看完
https://i.xue.taobao.com/my/learning.htm?spm=a2174.7365761.0.0.oxhqUo
第4章 Spring Boot 的Web開發
Web 開發是項目實戰中至關重要的一部分,Web開發的核心內容主要包括嵌入的Servlet容器和SpringMVC
Web開發官方文檔:
https://docs.spring.io/spring-boot/docs/2.0.6.RELEASE/reference/htmlsingle/#boot-features-spring-mvc
4.1 Web開發支持
Spring Boot 爲 Web 開發提供了 spring-boot-starter-web 啓動器作爲基本支持,爲我們提供了嵌入的
Tomcat 以及 Spring MVC 的依賴支持。(參考:pom.xml)
也提供了很多不同場景的自動配置類,讓我們只需要在配置文件中指定少量的配置即可啓動項目。自動配置
類存儲在 spring-boot-autoconfigure.jar 的 org.springframework.boot.autoconfigure 包下。
思考自動配置原理: 自動配置場景 SpringBoot 幫我們配置了什麼?是否修改?能修改哪些配置?是否可以
擴展?……
自動配置類舉例:
文件名可以看出
SpringMVC配置 : WebMvcAutoConfiguration 和 WebMvcProperties
內嵌 Servlet 容器 : ServletWebServerFactoryAutoConfiguration 和 ServerProperties
上傳文件的屬性 :MultipartAutoConfiguration 和 MultipartProperties
JDBC : DataSourceAutoConfiguration 和 DataSourceProperties
等等…………
4.2 靜態資源的映射規則
對靜態資源的映射規則, 可通過分析 WebMvcAutoConfiguration 自動配置類得到
4.2.1 webjars 資源映射
在 WebMvcAuotConfiguration.addResourceHandlers() 分析webjars 資源映射
1. 所有 /webjars/** 請求,都去 classpath:/META-INF/resources/webjars/ 目錄找對應資源文件
2. webjars:以jar包的方式引入靜態資源
webjars官網: https://www.webjars.org/
3. 在官網打開資源文件的依賴配置信息,然後粘貼到 pom.xml 中
4. 訪問 localhost:8080/webjars/jquery/3.3.1/jquery.js 會在下面路徑中查找
4.2.2 其他靜態資源映射
在 WebMvcAuotConfiguration.addResourceHandlers() 分析訪問其他資源映射
staticPathPattern 處理其他訪問的靜態路徑,從 WebMVCProperties 構造器中獲取到 /**
ResourceProperties 根據請求查找資源文件, 從以下 四個路徑 中 查找( 靜態資源目錄 )
總結:
當接受到 /** 請求訪問資源時, 會被映射到下面4個 類路徑下的靜態資源目錄中查找
訪問 localhost:8080/style.css 會在上面四個靜態資源路徑中查找文件
4.2.3 歡迎頁映射
在 WebMvcAuotConfiguration.welcomePageHandlerMapping() 分析 歡迎頁映射
getWelcomePage() 方法獲取 歡迎頁面 可存儲路徑
分析後, 會從 4個靜態資源目錄 + 根路徑 / 中 查找 index.html 頁面
會在靜態資源目錄下 與 根路徑查找 (按該順序) index.html頁面; 收到 "/**" 請求映射
訪問localhost:8080/ 會在上面5個目錄中查找 index.html 頁面(因爲/也屬於 /** )
4.2.4 圖標映射
Spring Boot 會在靜態資源目錄下 與 根路徑(按該順序) 查找 faicon.ico 頁面;
如果存在這樣的文件,Spring Boot 會自動將其設置爲應用圖標。
4.3 Thymeleaf 模板引擎
Spring Boot 官方不推薦使用JSP,因爲內嵌的 Tomcat 、Jetty 容器不支持以 jar 形式運行 JSP。Spring Boot
中提供了大量模板引擎,包含 Freemarker、Mastache、Thymeleaf 等。 而 Spring Boot 官方推薦使用
Thymeleaf 作爲模板引擎, 因爲 Thymeleaf 提供了完美的 SpringMVC 的支持。
4.3.1 引入 Thymeleaf
pom.xml 加入 Thymeleaf 啓動器
4.3.2 使用 Thymeleaf
模板文件放在哪裏 ?
通過上面分析發現, 將 HTML 頁面放到 classpath:/templates/ 目錄下, Thymeleaf 就能自動渲染
導入 Thymeleaf 的名稱空間
在 html 頁面加上以下名稱空間, 使用 Thymeleaf 時就有語法提示。
演示 Thymeleaf 語法
4.3.3 Thymeleaf 語法
4.3.3.1 常用屬性
參考 Thymeleaf 官方文檔 10 Attribute Precedence
4.3.3.2 標準表達式語法
參考 Thymeleaf 官方文檔 4 Standard Expression Syntax
4.3.4 實例代碼演示
4.3.4.1 聲明與引入公共片段
練習:將項目中的 公共模塊抽取出來到 public.html 中
4.3.4.2 迭代 th:each
常用迭代方式
獲取迭代狀態
練習 : 供應商管理 查詢頁面
4.3.4.3 條件判斷
4.3.4.4 顯示標籤體內容
4.3.4.5 th:object 直接取出對象
使用th:object 直接取出對象,然後寫對象裏的屬性名即可獲取屬性值
4.4 SpringBoot 熱部署
默認情況下, 在開發中我們修改一個項目文件後,想看到效果不得不重啓應用,這會導致浪費大量時間 ,我
們希望不重啓應用的情況下,程序可以自動部署(熱部署)。
4.5 分析 SpringMVC 自動配置
Spring Boot 爲 Spring MVC 提供了適用於多數應用的自動配置功能( WebMvcAutoConfiguration )。
在Spring默認基礎上,自動配置添加了以下特性:
如果想保留 Spring Boot MVC的特性,而且還想擴展新的功能(攔截器, 格式化器, 視圖控制器等),你可以在你自
定義的 WebMvcConfigurer 類上增加 @Configuration 註解。
如果你想全面控制SpringMVC(也就是不使用默認配置功能), 你在自定義的Web配置類上添加
@Configuration 和 @EnableWebMvc 註解。
4.6 擴展 SpringMVC 功能
擴展一個視圖解析器功能
4.7 全面控制 SpringMVC
如果你想全面控制SpringMVC(SpringBoot對SpringMVC的自動配置都廢棄), 在自定義的Web配置類上添加
@Configuration 和 @EnableWebMvc 註解。
4.8 總結 SpringMVC 配置
在Spring Boot中自已配置組件的時候,先看容器中有沒有公司自已配置的(@Bean、@Component),如果
有就用公司自已配置的; 如果沒有,才自動配置. 在Spring Boot中會有非常多的xxxConfigurer幫助我們進行擴展配置. 在Spring Boot中會有很多的xxxCustomizer幫助我們進行定製配置.