SpringBoot-05-web開發

5. SpringBoot Web開發

5.1 web開發探究

簡介

SpringBoot最大的特點就是自動裝配

使用SpringBoot的步驟:

  1. 創建一個SpringBoot應用,選擇我們需要的模組,springboot自動配置完成;
  2. 手動在配置文件中配置部分就可以運行起來了;
  3. 專註編寫業務程式碼即可!

比如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/

注意:

​ 一旦自定義了靜態文件的路徑,原來的自動配置都失效!

小結

  1. springboot中我們可以使用一下方法處理靜態資源
    • webjars(pom依賴)
      • localhost:8080/webjars/…
    • public static /** resources
      • localhost:8080/…
  2. 優先順序: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;

測試:

  1. 新建一個index.html
  2. 訪問測試,//localhost:8080/

關於網站圖標(過時)

​ 與其他靜態資源一樣,Springboot在配置的靜態內容位置中查找favicon.ico。如果存在,自動用作應用程式的favicon。

FAVICON("/**/favicon.ico");

private final String[] patterns;

StaticResourceLocation(String... patterns) {
   this.patterns = patterns;
}
  1. 關閉springboot默認圖標

    spring.mvc.favicon.enabled=false
    
  2. 放一個圖標在靜態資源目錄下,比如放在public目錄

  3. 清除瀏覽器快取,刷新即可生效!