SpringBoot-05-web開發

CodeHuba發表於2020-10-05

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就會去對應的路徑尋找資源,我們這裡可以訪問: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/

注意:

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

小結

  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. 訪問測試,http://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. 清除瀏覽器快取,重新整理即可生效!

相關文章