SpringBoot-05-web開發
- 2020 年 10 月 5 日
- 筆記
- springboot
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就會去對應的路徑尋找資源,我們這裡可以訪問://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
- 訪問測試,//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目錄
-
清除瀏覽器快取,刷新即可生效!