5. SpringBoot Web開發
5.1 web開發探究
簡介
SpringBoot最大的特點就是自動裝配
!
使用SpringBoot的步驟:
- 建立一個SpringBoot應用,選擇我們需要的模組,springboot自動配置完成;
- 手動在配置檔案中配置部分就可以執行起來了;
- 專注編寫業務程式碼即可!
比如SpringBoot到底幫我們配置了什麼?我們能不能修改?我們能修改哪些配置?我們能不能擴充套件?
- 向容器中自動配置元件:xxxAutoConfiguration
- 自動配置類,封裝配置檔案的內容:xxxProperties
5.2 靜態資源處理
靜態資源對映規則
首先,我們搭建一個普通的SpringBoot專案,回顧一下HelloWorld程式!
寫請求很簡單,那我們要引入前端資源,比如css,js等檔案,Springboot會怎麼處理呢?
如果是一個web應用,我們的main下會有一個webapp。但是現在的pom,打包方式是jar的方式,那麼這種方式下springboot對靜態資源的放置,是有規定的!
聊聊靜態資源對映規則:
SpringBoot中,SpringMVC的web配置都在WebMvcAutoConfiguration
這個配置類裡;進入這個類後我們可以看到一個方法:
addResourceHandlers 新增資源處理
讀一下原始碼:比如所有的/webjars/
,都需要去classpath:/META-INF/resources/webjars/
找對應的資源。
什麼是webjars呢?
Webjars本質就是以jar包的方式引入我們的靜態資源,以前要匯入一個靜態資源,直接匯入即可。
使用Springboot需要使用webjars,官網
要使用jQuery,我們只需引入jQuery對應版本的pom依賴
即可!
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.5.1</version>
</dependency>
匯入完畢,檢視webjars目錄結構,並訪問query.js檔案!
訪問:只要是靜態資源,Springboot就會去對應的路徑尋找資源,我們這裡可以訪問:http://localhost:8080/webjars/jquery3.5.1/jquery.js
第二種靜態資源對映規則
那我們專案中要使用自己的靜態資源該怎麼匯入呢?
在staticPathPattern
發現第二種對映規則:/**,訪問當前專案任意資源,它會去找ResourceProperties
這個類,點進去發現:
ResourceProperties
可以設定和我們靜態資源有關的引數,這裡面指向了它去尋找資源的資料夾,即上面陣列的內容,所以以下四個目錄存放的靜態資源可以被識別:
"classpath:/META-INF/resources/"
"classpath:/resources/"
"classpath:/static/"
"classpath:/public/"
優先順序向上以此增加!
我們可以在resources根目錄下新建對應的資料夾,都可以存放我們的靜態檔案;
自定義靜態資源路徑
可以配置自定義路徑,application.properties:
spring.resources.static-locations=classpath:/coding,classpath:/huba/
注意:
一旦自定義了靜態檔案的路徑,原來的自動配置都失效!
小結
- springboot中我們可以使用一下方法處理靜態資源
- webjars(pom依賴)
- localhost:8080/webjars/...
- public static /** resources
- localhost:8080/...
- webjars(pom依賴)
- 優先順序:resources>static(預設)>public
5.3 首頁處理
原始碼中我們可以看到歡迎頁的對映,就是我們的首頁!
@Bean
public WelcomePageHandlerMapping welcomePageHandlerMapping(ApplicationContext applicationContext,
FormattingConversionService mvcConversionService, ResourceUrlProvider mvcResourceUrlProvider) {
WelcomePageHandlerMapping welcomePageHandlerMapping = new WelcomePageHandlerMapping(
new TemplateAvailabilityProviders(applicationContext), applicationContext, getWelcomePage(),
this.mvcProperties.getStaticPathPattern());
welcomePageHandlerMapping.setInterceptors(getInterceptors(mvcConversionService, mvcResourceUrlProvider));
welcomePageHandlerMapping.setCorsConfigurations(getCorsConfigurations());
return welcomePageHandlerMapping;
}
點進去繼續看
private Resource getIndexHtml(String location) {
return this.resourceLoader.getResource(location + "index.html");
}
歡迎頁,靜態資源下的所有index.html
;被/**對映。
比如訪問localhost:8080/,就會找靜態資原始檔夾下的index.html;
測試:
- 新建一個index.html
- 訪問測試,http://localhost:8080/
關於網站圖示(過時)
與其他靜態資源一樣,Springboot在配置的靜態內容位置中查詢favicon.ico
。如果存在,自動用作應用程式的favicon。
FAVICON("/**/favicon.ico");
private final String[] patterns;
StaticResourceLocation(String... patterns) {
this.patterns = patterns;
}
-
關閉springboot預設圖示
spring.mvc.favicon.enabled=false
-
放一個圖示在靜態資源目錄下,比如放在public目錄
-
清除瀏覽器快取,重新整理即可生效!