SpringBoot靜態資源和WebJars

SpringBoot靜態資源目錄

默認情況下,Spring提供瞭如下幾個靜態資源目錄:

目錄 說明
/static classpath:/static/
/public classpath:/public/
/resources classpath:/resources/
/META-INF/resources classpath:/META-INF/resources

可以通過spring.resources.static-locations配置指定靜態文件的位置。
注意:一旦自己指定的靜態資目錄,系統默認的靜態資源目錄就會失效。一般情況下系統默認的就已經夠使用了,儘量不要自己定義。

spring:
  resources:
    static-locations: classpath:/mystatic/  # 指定靜態資源目錄

favicon.icon

如果在配置的靜態資源目錄中favicon.icon文件,SpringBoot會自動將其設置爲應用圖標。

歡迎頁面

SpringBoot支持靜態和模板歡迎頁,它首先在靜態資源目錄查看index.html文件作爲首頁,若未找到則查找index模板。

使用webjars管理JS和CSS

WebJars簡介

我們在開發Java web項目的時候會使用像Maven,Gradle等構建工具以實現對jar包版本依賴管理,以及項目的自動化管理,但是對於JavaScript,Css等前端資源包,一般情況下,我們採用拷貝到webapp下的方式,通過手工進行管理,這種通方式容易導致文件混亂、版本不一致等問題,而且無法對這些資源進行依賴管理。

WebJars通過將這些通用資源(JavaScript,Css等)打成jar包文件,然後藉助Maven對資源進行統一依賴管理,從而保證這些WEB資源版本的唯一性。

WebJars官網:https://www.webjars.org/ 。我們可以在這個網站上找到自己需要的資源,然後在自己的工程中添加Maven依賴,就可以直接使用這些資源了。

WebJars並不僅僅是依賴這麼簡單,它還提供瞭如下功能:

  • 將靜態資源版本化,更利於升級和維護。
    傳統的靜態資源需要自行維護,資源種類繁多,使得項目後期越來越臃腫,維護版本升級也變得困難,而使用WebJars方式進行管理後,版本升級問題迎刃而解。
  • 剝離靜態資源,提高編譯速度和打包效率。
    經測試,使用WebJars的方式管理依賴可以給項目的編譯速度帶來2-5倍的速度提升,還在猶豫的小夥伴快點嘗試起來吧!
  • 實現資源共享,有利於統一前端開發。
  • 清晰的管理web依賴
  • 通過Maven、Gradle等項目管理工具就可以下載WEB依賴
  • 解決WEB組件中傳遞依賴的問題以及版本問題
  • 頁面依賴的版本自動檢測功能
  • webjars就是以jar包的方式引入靜態資源;
  • 通過WebJars可以讓我們以jar包的形式來使用前端的各種框架、組件。
  • WebJars提供給我們前端資源的jar包形勢,我們就可以進行依賴管理。

示例

第一步:在WebJars官網查找對於的組件,比如jquery

<dependency>
    <groupId>org.webjars.bower</groupId>
    <artifactId>jquery</artifactId>
    <version>3.5.1</version>
</dependency>
<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>bootstrap</artifactId>
    <version>4.5.0</version>
</dependency>

第二步:application.yml

server:
  port: 80
  servlet:
    context-path: /wjd

spring:
  thymeleaf:
    #前綴,也就是模板存放的路徑
    prefix: classpath:/templates/
    #編碼格式
    encoding: UTF-8
    #關閉緩存,不然無法看到實時頁面
    cache: false
    #後綴
    suffix: .html
    #設置不嚴格的html
    mode: HTML
    servlet:
      content-type: text/html

第三步:定義用戶請求的Controller:

@Controller
public class DispatcherController {

    @RequestMapping("/demo")
    public String demo(){
        return "demo";
    }
    
    @RequestMapping("/demo2")
    public String demo2(){
        return "demo2";
    }

}

第四步:頁面引入

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="UTF-8">
        <title>webjars不使用版本定位工具</title>
        <link rel="stylesheet" th:href="@{/webjars/bootstrap/4.5.0/css/bootstrap.min.css}" />
        <script th:src="@{/webjars/bootstrap/4.5.0/js/bootstrap.min.js}"></script>
        <script th:src="@{/webjars/jquery/3.5.1/dist/jquery.js}"></script>
    </head>
    <body>
        <div class="container"><br/>
            <div class="alert alert-success">
                <a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>
                Hello, <strong>Dalaoyang!</strong>
            </div>
        </div>
        <hr>
        haha
        <hr>
        <button id="btn">JQuery</button>

        <script type="text/javascript">
            $("#btn").click(function () {
                alert(23+32);
            });
        </script>
    </body>
</html>

SpringBoot會將webjar中路徑/webjars/**的訪問重定向到項目的classpath:/META-INF/resources/webjars/*中。

第五步:啓動項目,查看效果:

在這裏插入圖片描述
單擊按鈕:
在這裏插入圖片描述

第六步:代碼優化

像上面的每個引用文件裏都要帶一個版本,假如項目要升級,需要挨個修改版本號,十分麻煩。解決辦法,Maven中添加版本定位工具:

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>webjars-locator-core</artifactId>
    <version>0.45</version>
</dependency>

調整後的頁面代碼:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="UTF-8">
        <title>WebJars使用版本定位工具</title>
        <link rel="stylesheet" th:href="@{/webjars/bootstrap/css/bootstrap.min.css}" />
        <script th:src="@{/webjars/bootstrap/js/bootstrap.min.js}"></script>
        <script th:src="@{/webjars/jquery/dist/jquery.js}"></script>
    </head>
    <body>
        <div class="container"><br/>
            <div class="alert alert-success">
                <a href="#" class="close" data-dismiss="alert" aria-label="close">×</a>
                Hello, <strong>Dalaoyang!</strong>
            </div>
        </div>
        <hr>
        <button id="btn">JQuery</button>

        <script type="text/javascript">
            $("#btn").click(function () {
                alert(23+32);
            });
        </script>
    </body>
</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章