天天看點

初遇SpringBoot踩坑與加載靜态檔案遇到的坑

                                            SpringBoot開發

建立SpringBoot項目

大家都知道SpringBoot開發非常快,建立SpringBoot項目時,勾上SpringWEB就正常開發,不需要任何配置檔案就可以運作,寫個背景Controller層接口即可做測試了。

你不相信?

真的有那麼神奇的東西?

那我現在就建立一個項目來一起測試下,我的開發環境JDK版本1.8,想玩SpringBoot或Springcloud的小夥伴一定要用jdk1.8及以上的版本哦,這裡用開發工具是STS也就是eclipse更新版,專門用來開發SpringBoot、SpringcCloud而研發的

初遇SpringBoot踩坑與加載靜态檔案遇到的坑
初遇SpringBoot踩坑與加載靜态檔案遇到的坑

項目建立完成了,

初遇SpringBoot踩坑與加載靜态檔案遇到的坑

這是我建立之後自生成的pom檔案,可以看到除了SpringWeb和Springtest就沒有其他的了

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.test</groupId>
    <artifactId>Test</artifactId>
    <version>1-SNAPSHOT</version>
    <name>Test</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.7.RELEASE</version>
                <configuration>
                    <mainClass>com.test.main.TestApplication</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>      

熱部署元件

當然,為了友善開發我們也可以加一個熱部署元件,在開發中修改背景代碼總需要無限關閉又重新開機項目的問題

這個元件就是devtools

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
</dependency>      

devtools版本号的話無需多說,都是SpringBoot自己管理,都是有一一對應的

初遇SpringBoot踩坑與加載靜态檔案遇到的坑

測試

 可以啟動成功了,可以寫測試接口了

初遇SpringBoot踩坑與加載靜态檔案遇到的坑

 添加熱部署後,不需要重新開機項目,直接來測試

初遇SpringBoot踩坑與加載靜态檔案遇到的坑

 還不信,我們可以打個斷點,用debug模式運作

初遇SpringBoot踩坑與加載靜态檔案遇到的坑

 到這裡,背景測試完成了,那麼前台資源怎麼弄,為什麼說坑?

我們知道,如何是一個web項目的時候,我們是有一個webApp目錄,但是我們項目現在是沒有的,那要不要加進去?

而且我不知道大家有沒有發現,我們建立項目的時候,用的是jar包的形式,不是war包

初遇SpringBoot踩坑與加載靜态檔案遇到的坑

廢話不多說,我們加進去試試吧

初遇SpringBoot踩坑與加載靜态檔案遇到的坑

 為了測試友善,代碼規範,我們把啟動類的測試方法提取到controller層來

初遇SpringBoot踩坑與加載靜态檔案遇到的坑

跳轉前端頁面

 問題來了,這怎麼跳轉到HTMl頁面去呢

開始呀,我也就随便寫個方法試試,好家夥跳了個寂寞,直接404

我不知道大家發現沒,你們在寫web項目時,controller注解使用的是個啥,不應該是@Controller注解麼?

我用的是@RestController,這個注解又是什麼鬼

不應該是說跳轉頁面麼?怎麼又說到注解了?大家别急看完就知道了

初遇SpringBoot踩坑與加載靜态檔案遇到的坑

 這個@RestController注解的StringBoot獨有的,它裡面已經包含了@ResponseBody了,也正因為是标注在類上了,是以标注了@RestController的類不能實作頁面跳轉,

如果要跳轉頁面,重定向頁面的話,隻能建立一個controller類,标記上@Controller注解,千萬别标記錯了

初遇SpringBoot踩坑與加載靜态檔案遇到的坑

 你以為這樣就行了麼?

想想你在開發SSM架構時,寫的那麼多配置檔案,是不是有點太簡單了

thymeleaf

那我告訴你,确實沒有那麼簡單,但是也不難,我們還需要加上一個元件,這個元件的名字就是thymeleaf

它的pom是

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
              

這個玩意幹嘛的?

這個就是java模闆引擎,聽起來是不是挺高大尚的,其實就是以前你們寫SpringMVC的東西,就是加前端視圖解析器等一些玩意啦

說那麼多都沒啥用,自己看一下SpringBoot對它的一些預設配置規則吧

初遇SpringBoot踩坑與加載靜态檔案遇到的坑
初遇SpringBoot踩坑與加載靜态檔案遇到的坑

看到這裡應該就不需要在進行多說了吧,我們就不需要寫SpringMVC的配置檔案了,按照它預設的配置對應的放進去就好了

thymeleaf的使用

當然,thymeleaf如果就那麼一點功能那就不會說他是高大尚了,以前用jsp開發時所有該有的功能,有了thymeleaf都可以用另外一個方式使用

那到底怎麼用呢,這裡我就簡單介紹一下,具體怎麼用,有哪些功能我感覺這個大佬教的還不錯,可以瞅瞅

https://fanlychie.github.io/post/thymeleaf.html

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">   <!--一定要在html标簽中加上哦-->
<head>
    <title>Index Page</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <p th:text="${message}">Welcome to BeiJing!</p><!--th:xxx     xxx指的是任意html屬性都可以替換掉      ${後端傳入前端的值}-->
</body>
</html>      

SpringBoot靜态資源映射規則

然後我們看一下SpringBoot靜态資源配置映射規則

初遇SpringBoot踩坑與加載靜态檔案遇到的坑

webjars

 預設為webjars找靜态檔案,webjars是個什麼鬼?

就是把前端用到的檔案打包成jar包的形式

初遇SpringBoot踩坑與加載靜态檔案遇到的坑

 有興趣的同學可以去瞅一眼

初遇SpringBoot踩坑與加載靜态檔案遇到的坑

 導入之後就是這樣的啦,剛好映射到SpringBoot靜态資源預設路徑

其他靜态資源路徑

除了webjars就沒有其他靜态資源路徑了嗎?其實還是有的,一路調試跟蹤下我們來到了這裡

初遇SpringBoot踩坑與加載靜态檔案遇到的坑

 我們發現,最後存放靜态資源檔案路徑就是這幾個啦

/**
 * 根路徑下的子路徑都是可以存放靜态資源檔案的
 */
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
                     "classpath:/META-INF/resources/", // 這個是根路徑
                     "classpath:/resources/",      // 根路徑下的子路徑
                     "classpath:/static/",        // 根路徑下的子路徑
                     "classpath:/public/"         // 根路徑下的子路徑
                     };      

不信就直接上測試啦

初遇SpringBoot踩坑與加載靜态檔案遇到的坑
初遇SpringBoot踩坑與加載靜态檔案遇到的坑

是以知道怎麼通路了嗎?

通路靜态資源的時候不需要加static、public等,但是如果是static 下的子檔案夾就需要在路徑上加上子檔案名

比如是static下有一個abc檔案夾,那麼通路路徑上就是這樣啦   127.0.0.1:8080/abc.test.js

歡迎頁存放路徑

那我們的歡迎頁放哪裡呢

初遇SpringBoot踩坑與加載靜态檔案遇到的坑

好了,關于靜态資源檔案的就那麼多,不愛勿噴哦

繼續閱讀